You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 01:44:55