在R中如何将JSON对象的嵌套key拆分为多个独立key并对应赋值
嵌套字符串化JSON字段扁平化解决思路
核心问题识别
你遇到的是「JSON字段值为字符串化的嵌套JSON」的场景,区别于普通原生JSON嵌套,多了一步字段值的反序列化步骤,处理逻辑如下:
分步处理方案
- 步骤1:先解析顶层JSON,提取
name等基础字段,同时单独捞出data1字段值 - 步骤2:对
data1的字符串值做二次JSON反序列化,拿到内部的data对象 - 步骤3:按需求提取内部字段:
- 取
data.friends数组的第一个元素对象,把里面的age、married字段直接提到顶层 - 新增空值的
friends字段,删除原data1字段
- 取
- 步骤4:批量处理大型文件时使用流式解析器,避免全量加载导致内存溢出
代码示例(Python)
import json from ijson import items # 流式解析大型JSON专用库 # 单条数据处理逻辑 def flatten_json(origin_item): # 提取顶层基础字段 result = { "name": origin_item["name"], "friends": "" # 按需求赋值空字符串 } # 二次解析嵌套的字符串化JSON inner_data = json.loads(origin_item["data1"]) # 提取friends数组第一个元素的字段 friend_item = inner_data["data"]["friends"][0] result.update(friend_item) return result # 大型JSON文件流式批量处理示例 with open("你的大文件路径.json", "r", encoding="utf-8") as f: # 逐元素解析,无需加载全量文件 for item in items(f, "item"): # 按你JSON顶层数组的实际key调整路径参数 processed = flatten_json(item) # 按需存储/输出处理后的结果 print(json.dumps(processed, ensure_ascii=False))
异常兼容注意点
- 若
data1里的JSON存在语法错误(比如你示例里的yes没有加引号),需要提前做字符串替换修复,或者使用容错JSON解析库处理 - 要兼容
friends数组为空、内部字段缺失的场景,提前加判空逻辑避免运行报错
内容的提问来源于stack exchange,提问作者Kowen
相关产品推荐
相关产品推荐

