【发布时间】:2017-12-16 01:05:50
【问题描述】:
我正在尝试使用 REST API 读取一些数据并将其写入数据库表。我写了下面的代码。但不幸的是,我有点坚持使用扁平化的 JSON。您能否提供一种将 JSON 转换为数据框的方法。
代码
import requests
import json
import pandas
from pandas.io.json import json_normalize
from flatten_json import flatten
j_username = 'ABCD'
j_password = '12456'
query = '"id = 112233445566"'
print query
r=requests.get('Url' % query, auth= (j_username,j_password))
print r.json()
first_response = r.json()
string_data = json.dumps(r.json())
normalized_r = json_normalize(r.json())
print flatten(r.json())
r_flattened = flatten(r.json())
r_flattened_str = json.dumps(flatten(r.json()))
print type (flatten(r.json()))
扁平化的 JSON 输出如下
{
'data_0_user-35': u'Xyz',
'data_0_user-34': None,
'data_0_user-37': u'CC',
'data_0_user-36': None,
'data_0_user-31': u'Regular',
'data_0_user-33': None,
'data_0_user-32': None,
'data_0_target-rcyc_id': 0101,
'data_0_to-mail': None,
'data_0_closing-version': None,
'data_0_user-44': None,
'data_0_test-reference': None,
'data_0_request-server': None,
'data_0_target-rcyc_type': u'regular type',
'data_0_project': None,
'data_0_user-01': u'Application Name',
'data_0_user-02': None,
'data_0_user-03': None, .......
.......
…… .....}
预期输出是
data_0_user-35 data_0_user-34 data_0_user-37 .........
XYZ None CC ........
【问题讨论】:
-
这不再是 JSON —— 看起来就像一本字典。您可能可以在中间剪掉一些步骤,但根据您所拥有的,您是否尝试过致电
pandas.from_dict(r_flattened)? -
我现在已经尝试过了,得到以下错误消息'code' print pandas.from_dict(r_flattened) AttributeError: 'module' object has no attribute 'from_dict' 'code'
-
抱歉,应该是
pandas.DataFrame.from_dict()。 -
这给了我以下错误'ValueError: If using all scalar values, you must pass an index'所以我尝试了这个'print pandas.DataFrame(r_flattened.items())'给了我下面的输出
-
` 0 1 data_0_user-35 Xyz 1 data_0_user-34 无 2 data_0_user-37 CC 3 data_0_user-36 无 4 data_0_user-31 常规 5 data_0_user-33 无 6 data_0_user-32 无 7 data_0_target-rcyc_id 0101 `
标签: python json python-2.7 dataframe flatten