在字符串中解码带有 u' 和十进制值的 Python json



我需要解码并加载到db,一个以以下格式到达的字符串:

"[{u'date': 1508760000000, u'value': 0}, {u'date': 1509364800000, u'value': Decimal('5.989999771118164')}, {u'date': 1509969600000, u'value': Decimal('5.989999771118164')}, {u'date': 1510574400000, u'value': Decimal('9.579999923706055')}]"

当前,这是我使用的代码将其转换为数据框:

import pandas as pd
import json
#json for example:
my_json="""[{u'date': 1508760000000, u'value': 0}, {u'date': 1509364800000, u'value': Decimal('5.989999771118164')}, {u'date': 1509969600000, u'value': Decimal('5.989999771118164')}, {u'date': 1510574400000, u'value': Decimal('9.579999923706055')}]"""
my_json=my_json[1:-1]
my_json=my_json.replace("u'","'")
my_json=my_json.replace("'",'"')
my_json=my_json.replace('Decimal("','')
my_json=my_json.replace('")','')
my_json=my_json.replace(', {','~ {')
my_json_list=my_json.split('~')
my_dict_list=[json.loads(row) for row in my_json_list]
df=pd.DataFrame(my_dict_list)

是否有更短/更优雅的方法来执行此操作?

使用 eval

from decimal import *
df = pd.DataFrame(eval(my_json))
           date              value
0  1508760000000                  0
1  1509364800000  5.989999771118164
2  1509969600000  5.989999771118164
3  1510574400000  9.579999923706055

u表示unicode-但是,如果您的所有字符都是基于ASCII的 - 像英语一样,您可以只使用铸件str(),这就是其中的输出:

str(u'date')
'date'

我认为这将解决您的问题。

最新更新