You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:15:42