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

如何将数据集中存储JSON键值对列表的列拆分为多列?

当然可以!这种把嵌套JSON数组展开为结构化列的需求非常常见,下面我会给出几种主流技术栈的实现方案,你可以根据自己的使用场景选择:

Python Pandas 实现

如果你的数据是用Pandas DataFrame存储的,可以通过解析JSON、展开数组再透视的方式完成转换:

import pandas as pd
import json

# 模拟你的数据集
data = {
    "ID": [1],
    "Settings": ['[{"key":"key1","value":"val1"}, {"key":"key2","value":"val2"}, {"key":"key3","value":"val3"}]']
}
df = pd.DataFrame(data)

# 解析Settings列的JSON字符串为Python列表
df['Settings'] = df['Settings'].apply(json.loads)

# 展开JSON数组,将每个key-value对转为行,再透视成列
settings_expanded = df['Settings'].apply(pd.Series).melt(value_name='kv_pair').dropna()
settings_pivoted = settings_expanded['kv_pair'].apply(pd.Series).pivot(columns='key', values='value').reset_index(drop=True)

# 合并回原数据集
final_df = pd.concat([df.drop('Settings', axis=1), settings_pivoted], axis=1)
print(final_df)

运行后你会得到结构化的结果:

IDkey1key2key3
1val1val2val3

PostgreSQL 实现

如果数据存储在PostgreSQL数据库中,可以利用其原生的JSON函数和交叉表功能完成转换:

-- 创建示例表并插入数据
CREATE TABLE test_data (
    ID INT,
    Settings JSONB
);
INSERT INTO test_data VALUES (1, '[{"key":"key1","value":"val1"}, {"key":"key2","value":"val2"}, {"key":"key3","value":"val3"}]');

-- 展开JSON数组并转换为宽表
SELECT * FROM crosstab(
    'SELECT ID, s->>''key'' AS key, s->>''value'' AS value
     FROM test_data, jsonb_array_elements(Settings) AS s
     ORDER BY 1, 2',
    'SELECT DISTINCT s->>''key'' FROM test_data, jsonb_array_elements(Settings) AS s ORDER BY 1'
) AS ct(ID INT, key1 TEXT, key2 TEXT, key3 TEXT);

这个查询会直接返回你需要的结构化结果集。

核心思路总结

不管用哪种工具,核心步骤都是一致的:

  1. 解析JSON格式的字符串为可操作的数组/对象
  2. 将数组展开为多行(每行对应一个key-value对)
  3. 将多行数据透视(pivot)为宽表,把key作为列名,value作为对应单元格的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:08:14