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

如何用Python展开含索引命名键的JSON数据为结构化表格

问题与解决方案

问题描述

输入的非规范结构化数据:

id,hardware_json
1,{hardware[0]_id:123,hardware[0]_name:ModelA,hardware[0]_type:M,hardware[1]_id:345,hardware[1]_name:ModelB,hardware[1]_type:N,hardware[0]_vendor:cnfd....}

需要转换为每行对应一个硬件的结构化格式:

Id,hardware_id,hardware_name,hardware_type,hardware_vendor
1,123,ModelA,M
1,345,ModelB,N,cnfd

同时需了解Python是否有内置JSON处理函数可实现该需求。


代码实现

原始的hardware_json并非标准JSON格式,需先做字符串预处理,再结合Python内置模块完成转换:

import json
import re

# 模拟输入数据
input_data = """id,hardware_json
1,{hardware[0]_id:123,hardware[0]_name:ModelA,hardware[0]_type:M,hardware[1]_id:345,hardware[1]_name:ModelB,hardware[1]_type:N,hardware[0]_vendor:cnfd}"""

# 拆分输入的表头与数据行
lines = input_data.strip().split('\n')
_, data_line = lines[0], lines[1]
main_id, hardware_raw = data_line.split(',', 1)

# 用正则提取硬件索引、属性名和属性值
hardware_map = {}
pattern = re.compile(r'hardware\[(\d+)\]_([a-z]+):([^,}]+)')
for match in pattern.finditer(hardware_raw):
    idx, prop, val = match.groups()
    idx = int(idx)
    if idx not in hardware_map:
        hardware_map[idx] = {}
    hardware_map[idx][f'hardware_{prop}'] = val.strip()

# 生成目标格式输出
output_header = "Id,hardware_id,hardware_name,hardware_type,hardware_vendor"
output_rows = [output_header]
for hw_attrs in hardware_map.values():
    # 按表头顺序提取属性,缺失则留空,最后剔除末尾空值
    row = [
        main_id,
        hw_attrs.get('hardware_id', ''),
        hw_attrs.get('hardware_name', ''),
        hw_attrs.get('hardware_type', ''),
        hw_attrs.get('hardware_vendor', '')
    ]
    while row and row[-1] == '':
        row.pop()
    output_rows.append(','.join(row))

# 打印结果
print('\n'.join(output_rows))

关于Python内置JSON处理函数的说明

Python内置的json模块仅支持标准JSON格式的解析与生成(要求键、字符串值必须用双引号包裹,结构符合JSON规范)。你的原始hardware_json是非标准格式(键无引号、用下划线分割索引与属性),无法直接用json.loads()解析,必须先通过字符串替换、正则提取等方式将其转换为可结构化的数据,之后可结合json模块处理中间数据。

如果能将原始数据修正为标准JSON(例如{"hardware": [{"id":123, "name":"ModelA"}, {"id":345, "name":"ModelB"}]}),则可直接用json.loads()快速解析为Python列表/字典,处理效率会更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:07:43