如何将API返回的嵌套JSON转换为指定格式pandas DataFrame
问题原因
- 你之前调用
pd.json_normalize传record_path=['rows']得到异常结果,核心是原始JSON存在两层嵌套:rows数组下的每个元素,实际值都存储在f子数组中,子数组里的每个元素才是存v值的最小单元,直接读最外层rows只能拿到包裹的f列,自然出现单列、数据拆分错误的问题 - 第二个位置的
v字段不是结构化对象,是字符串格式的非标准JSON(键值对用=连接,不符合JSON用:的语法规范),无法被json_normalize直接自动解析 - 原始数据里有两个同名为
v的字段,需要手动指定列名避免重名冲突
实现代码
import pandas as pd import json # 读取接口返回的rows节点数据 raw_rows = response.json()["rows"] formatted_data = [] for row in raw_rows: # 提取当前行f数组下所有的v值 v_values = [field["v"] for field in row["f"]] # 处理第二个位置的非标准JSON字符串:替换=为:后解析为字典 nested_content = json.loads(v_values[1].replace("=", ":"))[0] # 按目标结构拼接行数据:第一个v、第三个v、name、Age formatted_data.append([ v_values[0], v_values[2], nested_content["name"], nested_content["Age"] ]) # 生成DataFrame,可自定义v字段对应的列名,示例把两个v列命名为v1、v2 df = pd.DataFrame( formatted_data, columns=["v1", "v2", "name", "Age"] )
运行结果
执行后得到的DataFrame完全匹配目标结构:
v1 v2 name Age 0 1a 1c sam 10 1 2a 2c tom 40
提示:如果后续接口返回的嵌套字符串格式有调整,只需要对应修改
v_values[1]的解析逻辑即可;要修改v字段的列名,直接调整columns参数里的名称就行。
内容的提问来源于stack exchange,提问作者Shay
相关产品推荐
相关产品推荐

