如何使用python中的pagenation从API创建有效的json文件?

2024-06-25 23:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图把星球大战API中的所有人都拉到一个有效的json文件中。在

API限制了结果集和所有的“people”跨9个分离调用(即“https://swapi.co/api/people/?page=1”、“https://swapi.co/api/people/?page=2”等)。在

当我循环处理多个请求时,最后得到的是无效的json,因为文档之间没有逗号分隔符,现在开始和结束的括号。在

请帮我解决电话里我做错了什么。在

import requests
import json

for x in range(1,9):  
    response = requests.get("https://swapi.co/api/people/?page="+str(x))
    data = response.json()

    next_page = data["next"] 
    results = data["results"]

    for result in results:  
        with open('data.json', 'a') as outfile:
            json.dump(result, outfile)
print('Done!')

json文件输出:

^{pr2}$

Tags: 文件inhttpsimportapijsonfordata
3条回答

我希望这能解决您缺少逗号的问题

import requests
import json

for x in range(1,9):  
    response = requests.get("https://swapi.co/api/people/?page="+str(x))
    data = response.json()

    next_page = data["next"] 
    results = data["results"]

    res = ''
    for result in results:  
        temp = str(result) + ',' 
        res = res + temp 
    with open('data.json', 'a') as outfile:
      outfile.write(res)

print('Done!')

我刚刚将'result'变量转换为字符串,并将其附加到每个页面。当单个页面的字典结束时,它会将其附加到文件'数据.json'. 在

将结果保存到内存中,然后只执行一个操作json.dump即可解决问题:

import requests
import json

results = []
for x in range(1, 9):
    response = requests.get("https://swapi.co/api/people/?page="+str(x))
    data = response.json()

    next_page = data["next"]
    results.extend(data["results"])

with open('data.json', 'w') as outfile:
    json.dump(results, outfile)

不要边做边序列化,而是将数据追加到一个列表中,并在到达末尾时将其序列化一次。在

all_results = []

for x in range(1,9):  
    response = requests.get("https://swapi.co/api/people/?page="+str(x))
    data = response.json()

    next_page = data["next"] 
    results = data["results"]
    all_results.extend(results)

with open('data.json', 'w') as outfile:
    json.dump(all_results, outfile)

相关问题 更多 >