【发布时间】:2018-06-02 18:13:41
【问题描述】:
我需要解码并加载到数据库中,这是一个以以下格式到达的字符串:
"[{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)
是否有更短/更优雅的方式来执行此操作?
【问题讨论】:
-
您提供的字符串不是有效的
json,因为它以列表开头。 -
那个字符串是从哪里来的?看起来它是从
dict的pythonlist的print复制而来(每个字符串之前的u表示它是一个unicode 字符串),实际上不是有效的JSON。 -
您可以使用
ast将字符串转换为文字结构,如下所示:import ast; ast.literal_eval(string)但在您的情况下,您有 Decimal 对象并且它不起作用,但您可以检查此 answer他们在哪里解决您的问题。 -
@KaushikNP:为什么这会使 JSON 无效?您会声称字符串
"[1, 2, 3]"是无效的 JSON 吗? (我同意该字符串不是有效的 JSON,但它是顶级 JSON 数组没有问题。) -
@MarkDickinson :正如你所提到的,我的意思是它应该被归类为 JSONArray。
标签: python json string pandas dataframe