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

Python实现多层嵌套字典JSON转指定结构DataFrame

多层嵌套JSON转指定结构DataFrame实现方案

该JSON嵌套层级固定,直接逐层遍历提取字段即可,无需复杂通用递归逻辑,执行效率高且不会出现字段错位问题。

依赖准备

仅需安装pandas库,执行以下命令安装:
pip install pandas

完整可运行代码

import json
import pandas as pd

# 从本地JSON文件读取数据时放开下方注释,替换为实际文件路径
# with open("your_data.json", "r", encoding="utf-8") as f:
#     raw_data = json.load(f)

# 此处使用提问中提供的样例数据做演示
raw_data = {
    "last_scanned_block": 14968718,
    "blocks": {
        "13965799": {
            "0x9603846aff5c425277e483de16179a68dbc739debcc5449ea99e45c9d0924430": {
                "165": {
                    "from": "0x0000000000000000000000000000000000000000",
                    "to": "0x01f87c337be5636Cd9B3D48F1159768A7e7837A5",
                    "value": 100000000000000000000000000,
                    "timestamp": "2022-01-08T16:19:02"
                }
            }
        },
        "13965820": {
            "0xd4a4122734a522c40504c8b0ab43b9aa40ac821cd9913179b3ae64e5b166fc57": {
                "226": {
                    "from": "0x01f87c337be5636Cd9B3D48F1159768A7e7837A5",
                    "to": "0xEa3Fa123Eb40CEEaeED390D8d6dE6AF95f044AF7",
                    "value": 610000000000000000000000,
                    "timestamp": "2022-01-08T16:25:12"
                }
            }
        }
    }
}

result_rows = []
last_scanned_block_val = raw_data["last_scanned_block"]

# 逐层遍历嵌套结构
for block_id, tx_hash_map in raw_data["blocks"].items():
    for tx_hash, num_map in tx_hash_map.items():
        for tx_num, tx_detail in num_map.items():
            single_row = {
                "Last_scanned_block": last_scanned_block_val,
                "block": block_id,
                "hex": tx_hash,
                "number": int(tx_num),
                "from": tx_detail["from"],
                "to": tx_detail["to"],
                "value": tx_detail["value"],
                "timestamp": tx_detail["timestamp"]
            }
            result_rows.append(single_row)

# 生成DataFrame并固定列顺序
df = pd.DataFrame(
    result_rows,
    columns=["Last_scanned_block", "block", "hex", "number", "from", "to", "value", "timestamp"]
)

# 打印验证结果
print(df)

运行效果

代码执行后生成的DataFrame完全匹配要求的8个字段,第一行取值与提问中给出的示例完全一致,样例数据运行后输出如下:

Last_scanned_blockblockhexnumberfromtovaluetimestamp
14968718139657990x9603846aff5c425277e483de16179a68dbc739debcc5449ea99e45c9d09244301650x00000000000000000000000000000000000000000x01f87c337be5636Cd9B3D48F1159768A7e7837A51000000000000000000000000002022-01-08T16:19:02
14968718139658200xd4a4122734a522c40504c8b0ab43b9aa40ac821cd9913179b3ae64e5b166fc572260x01f87c337be5636Cd9B3D48F1159768A7e7837A50xEa3Fa123Eb40CEEaeED390D8d6dE6AF95f044AF76100000000000000000000002022-01-08T16:25:12

可选调整

  • 若需要保留number字段为字符串类型,删除代码中int(tx_num)的int()转换即可
  • 若需要调整列顺序,修改pd.DataFrame参数中columns列表的元素顺序即可
  • 若后续JSON嵌套层级发生变动,对应增减遍历循环的层数即可
  • 大数据量场景下,当前采用的「先攒列表再转DataFrame」的方式,比逐行追加DataFrame的执行效率高1~2个数量级

内容的提问来源于stack exchange,提问作者user9901718

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:00:57