基于Open Notify API的ISS追踪器:如何实现JSON数据逐行输出?
解决ISS追踪器JSON数据单行输出问题
你的问题出在每次调用json.dump()时,会直接把JSON对象连续写入文件,没有添加换行分隔,导致所有数据挤在一行。只需在每次写入单个JSON对象后,手动添加换行符即可实现每行一条数据的效果。
修改方案一:每次dump后写入换行符
import requests import json import time URL = "http://api.open-notify.org/iss-now.json" filename = 'store.json' i = 0 with open(filename, 'w') as file_object: while i < 11: r = requests.get(url=URL) data = r.json() save = { 'time': data['timestamp'], 'latitude': data['iss_position']['latitude'], 'longitude': data['iss_position']['longitude'] } json.dump(save, file_object) file_object.write('\n') # 新增:写入JSON后添加换行 time.sleep(1) i += 1
修改方案二:用json.dumps生成字符串后加换行写入
这种方式更直观,先把JSON转为字符串,再加上换行符写入文件:
import requests import json import time URL = "http://api.open-notify.org/iss-now.json" filename = 'store.json' i = 0 with open(filename, 'w') as file_object: while i < 11: r = requests.get(url=URL) data = r.json() save = { 'time': data['timestamp'], 'latitude': data['iss_position']['latitude'], 'longitude': data['iss_position']['longitude'] } # 直接写入带换行的JSON字符串 file_object.write(json.dumps(save) + '\n') time.sleep(1) i += 1
两种方法最终都会生成JSON Lines格式的文件,每行一个独立的JSON对象,既方便后续逐行解析读取,也满足你要求的每行一条数据的展示需求。
内容的提问来源于stack exchange,提问作者Jonathan Cha
相关产品推荐
相关产品推荐

