【发布时间】:2025-12-14 19:00:01
【问题描述】:
我有以下代码:
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
此代码向 API 发送 get 请求,获取结果解析它们并生成 JSON 文件。
这很好用。
现在,我想修改importdata 函数以支持分页(合并在一起的多个调用)。
所以我写了这段代码:
def impordatatnew():
...
is_valid = True
value_offset = 0
value_limit = 100
datarALL = []
while is_valid:
is_valid = False
urlApi = 'http://....?offset={1}&limit={2}&startDate={0}'.format(
requestedDate,value_offset,value_limit)
responsedata = requests.get(urlApi, data=data, headers=hed, verify=False)
if responsedata.status_code == 200: # Use status code to check request status, 200 for successful call
responsedata = responsedata.text
value_offset = value_offset + value_limit
# to do: merge the result of the get request
jsondata = json.loads(responsedata)
if "results" in jsondata:
if jsondata["results"]:
is_valid = True
if is_valid:
# concat array by + operand
datarALL = datarALL + jsondata["results"]
else:
#TODO handle other codes
print responsedata.status_code
return datarALL
此代码使用分页。它连接到 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' 我明白这一点,但我不知道如何解决这个问题。我似乎无法进行这种转换。
【问题讨论】:
-
考虑提供一个minimal example 代码来玩。
-
@mxmt 添加示例
标签: python json python-requests