Python逐行读取含多段JSON的文件提取指定键值并生成DataFrame的问题
问题原因
你当前的代码存在两个核心问题:
- 你读取的文件内容是纯字符串,直接遍历字符串拿到的是单个字符,不可能通过
resp0['value']取到数据 - 你的文件不是标准的单JSON结构,是多段
respX = {JSON}格式的Python赋值语句集合,不能直接用JSON解析工具读取整个文件
实现步骤
方案1:正则提取JSON(推荐,安全性高)
用正则匹配所有响应的JSON内容,解析后合并value数组,代码如下:
import json import re import pandas as pd all_values = [] file_path = r'C:\Users\path\abc.json' # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 匹配所有respX = 后的JSON对象 json_pattern = re.compile(r'resp\d+\s*=\s*(\{.*?\})(?=\s*resp\d|\Z)', re.DOTALL) json_str_list = json_pattern.findall(content) for json_str in json_str_list: # 解析单页响应 resp = json.loads(json_str) # 合并当前页的value到总列表 all_values.extend(resp.get('value', [])) # 直接转DataFrame,不需要先生成你要的嵌套结构也可以 df = pd.DataFrame(all_values) # 如果需要你要求的最终JSON格式,可以按以下生成 final_json = {"value": all_values}
方案2:exec执行赋值语句(简单,适合自用文件)
如果你确定文件是你自己生成的、没有恶意代码,可以直接执行文件里的赋值语句,遍历变量拿数据:
import pandas as pd all_values = [] file_path = r'C:\Users\path\abc.json' var_pool = {} with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 执行所有赋值语句,变量会存在var_pool中 exec(content, globals(), var_pool) # 遍历所有resp开头的响应变量 for var_name, resp in var_pool.items(): if var_name.startswith('resp'): all_values.extend(resp.get('value', [])) df = pd.DataFrame(all_values)
后续操作
拿到DataFrame后,你可以直接用pandas的to_sql方法对接数据库,完成数据导入。
内容的提问来源于stack exchange,提问作者Harshita
相关产品推荐
相关产品推荐

