Python如何过滤单行JSON数组提取指定字段并保存到文件
单行大体积JSON数组提取指定字段实现方案
单行格式的JSON数组本身是完全合法的标准JSON结构,解析失败基本是读取方法调用错误导致的,不需要提前做换行、拆分等格式预处理,下面提供两种可直接落地的实现方案:
方案1:Python标准库实现(大文件优先选,内存占用更低)
无需安装第三方依赖,对大体量文件的适配性更好,没有额外的解析开销。
import json import requests # 直接调用接口获取响应处理 resp = requests.get("替换为你的实际接口地址") # 单行JSON可直接通过json方法解析,无格式障碍 raw_data = resp.json() # 批量提取thingname字段,自动跳过字段缺失的异常项 result = [item.get("thingname") for item in raw_data if isinstance(item, dict) and "thingname" in item] # 如果原始JSON已经存在本地文件,替换为以下读取逻辑即可 # with open("原始单行JSON文件路径.json", "r", encoding="utf-8") as f: # raw_data = json.load(f) # result = [item.get("thingname") for item in raw_data if isinstance(item, dict) and "thingname" in item] # 提取结果写入新文件,每行存一个值方便后续使用 with open("thingname提取结果.txt", "w", encoding="utf-8") as f: for item in result: f.write(f"{item}\n")
方案2:Pandas实现(适配已有pandas使用习惯)
之前用pandas处理失败和JSON是单行格式无关,是读取参数配置错误导致的,用默认参数即可正常解析:
import pandas as pd import requests resp = requests.get("替换为你的实际接口地址") # 注意不要加lines=True参数!标准数组格式JSON开该参数必然解析失败 df = pd.read_json(resp.text) result = df["thingname"].dropna().tolist() # 本地文件读取逻辑 # df = pd.read_json("原始单行JSON文件路径.json") # result = df["thingname"].dropna().tolist() # 结果写入文件 with open("thingname提取结果_pandas版.txt", "w", encoding="utf-8") as f: for item in result: f.write(f"{item}\n")
常见踩坑提示
pd.read_json和json.load的lines=True参数,仅适配JSON Lines格式(每行一个独立JSON对象,无外层数组包裹),处理你手里的标准数组格式JSON时不要开启该参数- 如果单文件体积超过本机可用内存,可以换用
ijson库做流式解析,不需要把整个JSON加载进内存就能逐个遍历提取thingname字段,适配超大型文件场景
如果你要提取的结果不需要做后续的结构化处理,优先选标准库方案,解析速度更快,内存占用比pandas低60%以上。
内容的提问来源于stack exchange,提问作者SabriLK
相关产品推荐
相关产品推荐

