我有以下代码:
def flatten_json(y):
out = {}
def flatten(x, name=''):
if type(x) is dict:
for a in x:
flatten(x[a], name + a + '_')
elif type(x) is list:
out[name[:-1]] = x
else:
out[name[:-1]] = x
flatten(y)
return out
def importdata(data):
responsedata = requests.get(urlApi, data=data, headers=hed, verify=False)
return responsedata
def generatejson(response):
# Generate flat json file
sample_object = pd.DataFrame(response.json())['results'].to_dict()
flat = {k: flat_json(v) for k, v in sample_object.items()}
return json.dumps(flat, sort_keys=True)
response = importdata(data)
flat_json = generatejson(response)
importdata(data)
返回的示例:
https://textuploader.com/dz30p
这段代码将get请求发送到API get结果解析它们并生成一个JSON文件。在
这个很好用。在
现在,我想修改importdata
函数以支持分页(合并在一起的多个调用)。在
所以我写了这个代码:
^{pr2}$此代码使用分页。它连接到API,逐页获取结果并将它们组合成一个列表。如果我这样做:
print json.dumps(datarALL)
我看到了组合的JSON,所以这很好用。
转储示例:
https://jsonblob.com/707ead1c-9891-11e8-b651-496f6b276e89
return datarALL
的示例:
https://textuploader.com/dz39d
我的问题:
我似乎无法使用impordatatnew()
的返回值来处理generatejson()
。如何使impordatatnew()
的返回值与兼容
generatejson()
?我试图修改如下:
def generatejsonnew(response):
#Generate flat json file
sample_object = pd.DataFrame(response.json()).to_dict()
flat = {k: flat_json(v) for k, v in sample_object.items()}
return json.dumps(flat, sort_keys=True)
它提供:
sample_object = pd.DataFrame(response.json()).to_dict() AttributeError: 'list' object has no attribute 'json' I understand that but I don't know how to solve this. I can't seems to make this conversion works.
它不起作用是因为你这样做:
你现在做的似乎是逐步建立一个列表。您可以将其简化为:
^{pr2}$问题出现在后面:
这是因为您再次调用了
json()
,它已经从JSON解析为Python列表。因此出现错误消息。在但真正令人头疼的是你为什么要这样做:
这并不是真正的“使用Pandas”,而是将一个列表重新格式化为dict。当然有一种更直接的方法可以做到这一点,比如使用
for
循环来构建dict(确切地说,没有示例数据,我们无法判断)。在无论如何,如果您想填充一个数据帧,只需删除
.json()
部分,它的工作方式应该与原始的非分页代码类似。在但是更有效的方法是使用原始代码在每页上构造一个数据帧,然后调用}就是这些数据帧的列表。那么就不需要构建
pd.concat(pages)
,其中{dataALL
。在最终,您的代码可以简化得多,最终会变成这样:
也就是说,首先使用
for
循环来构建all_page_urls
,然后使用上面的一个行程序将所有数据收集到单个数据帧中。在参考号:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html#pandas.read_json
相关问题 更多 >
编程相关推荐