R与Python处理JSON数据结果差异及Python统一转换方法求助
两种JSON格式转目标结构的Python实现
情况1:外层包含单个表名键的JSON
输入格式:
{ "table_name": [{ "id": 1, "name": "john" },{ "id": 2, "name": "doe" }] }
直接提取对应键的取值即可:
import json json_data = json.loads('{ "table_name": [{ "id": 1, "name": "john" },{ "id": 2, "name": "doe" }] }') result = json_data["table_name"] # 输出格式化后的JSON字符串 print(json.dumps(result, indent=2))
情况2:键对应平行数组的JSON
输入格式:
{ "id": ["1", "2"], "name": ["john", "doe"] }
纯Python方法
用zip函数配对数组元素,同时完成类型转换:
import json json_data = json.loads('{"id": ["1", "2"], "name": ["john", "doe"]}') result = [ {"id": int(id_val), "name": name_val} for id_val, name_val in zip(json_data["id"], json_data["name"]) ] print(json.dumps(result, indent=2))
pandas方法
先转成DataFrame,再转换为字典列表:
import json import pandas as pd json_data = json.loads('{"id": ["1", "2"], "name": ["john", "doe"]}') df = pd.DataFrame(json_data) # 将id列转为整数类型 df["id"] = df["id"].astype(int) # 转成目标格式的字典列表 result = df.to_dict("records") print(json.dumps(result, indent=2))
R与Python处理数据的差异原因
R的tidyr::unnest是针对嵌套数据框设计的工具:R中常把嵌套列表作为数据框的列存储,unnest的作用是将这种嵌套列展开为多行数据。而Python的原生数据结构和pandas的设计逻辑不同:
- 对于第一种JSON,R读入后会生成带列表列的数据框,
unnest负责展开该列;但Python读入后是字典结构,直接提取键值更高效。 - 对于第二种JSON,R读入后是普通数据框(每列对应一个数组),
unnest在这里并非必需;而Python需要将列级数组转换为行级字典,处理场景和R完全不同。
两者的差异本质是R和Python对“嵌套数据”的定义、存储方式不同,工具的设计逻辑自然匹配各自的生态,不存在优劣之分,只需根据当前数据结构选择对应方法即可。
内容的提问来源于stack exchange,提问作者sourabh
相关产品推荐
相关产品推荐

