获取JSON数据却存为字符串,如何保留JSON结构存入CSV?
解决方案
给你两个实用方案,按需选择:
方案一:每行存储标准JSON字符串
直接把JSON数据转成标准的JSON字符串写入CSV,后续读取时再解析成JSON对象,就能直接调取字段。注意用json.dumps()代替str(data),前者生成的是标准双引号JSON,解析更可靠;同时用with语句管理文件,避免手动关闭的问题。
修改后的代码:
import time import requests import json run_time = 30 run_until = time.time() + run_time while time.time() < run_until: url = 'http://xxx' # with语句自动处理文件打开/关闭,更安全 with open('cam_data2.csv', 'a', encoding='utf-8') as csv_file: req = requests.get(url) data = req.json() # 生成标准JSON字符串写入 csv_file.write(json.dumps(data) + '\n') time.sleep(5)
后续读取并调取字段的代码:
import json with open('cam_data2.csv', 'r', encoding='utf-8') as f: for line in f: # 解析每行的JSON字符串 data = json.loads(line.strip()) # 直接调取字段 diastolic = data['blood_pressure_diastolic_value'] systolic = data['blood_pressure_systolic_value'] # 这里做后续处理
方案二:将JSON字段拆分为CSV列(更推荐)
把JSON的每个字段作为CSV的一列,写入表头和对应数据,这样CSV是结构化的表格,后续读取时直接按列取字段,更符合CSV的使用场景。
修改后的代码:
import time import requests import csv run_time = 30 run_until = time.time() + run_time # 判断文件是否存在,决定是否写入表头 file_exists = False try: with open('cam_data2.csv', 'r'): file_exists = True except FileNotFoundError: pass while time.time() < run_until: url = 'http://xxx' req = requests.get(url) data = req.json() # 定义CSV的字段顺序 fields = ['blood_pressure_diastolic_value', 'blood_pressure_systolic_value'] with open('cam_data2.csv', 'a', newline='', encoding='utf-8') as csv_file: writer = csv.DictWriter(csv_file, fieldnames=fields) # 第一次写入时添加表头 if not file_exists: writer.writeheader() file_exists = True # 写入当前数据行 writer.writerow(data) time.sleep(5)
后续读取并调取字段的代码:
import csv with open('cam_data2.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: # 直接通过字段名取值,注意转成对应类型 diastolic = float(row['blood_pressure_diastolic_value']) systolic = float(row['blood_pressure_systolic_value']) # 这里做后续处理
内容的提问来源于stack exchange,提问作者WonderWoman
相关产品推荐
相关产品推荐

