Featured image of post DuckDB 处理不规则 JSON 数据:从\

DuckDB 处理不规则 JSON 数据:从"解析到崩溃"到 5 分钟出结果

业务方甩来几万行嵌套 JSON 文件?别再用 Python 逐行解析了。DuckDB 一行 SQL 自动推断 schema,3 秒出结构化数据,附完整代码和性能对比。

DuckDB 处理不规则 JSON 数据:从"解析到崩溃"到 5 分钟出结果

场景引入:那个让数据分析师失眠的 JSON 文件

你有没有遇到过这种场景:

周一早上,业务方甩给你一个 JSON 文件,说"里面是用户行为数据,帮我把里面的关键指标提取出来做分析"。你打开一看——好家伙,几万行嵌套 JSON,字段还不一样,有的有 user_id,有的没有,有的嵌套了三层,有的数组里还套着对象。

用 Python 逐行解析?代码写了半天,跑起来还报 KeyError。用 Pandas 读?直接 OOM 内存溢出。用 Excel 打开?电脑直接卡死。

这就是"不规则 JSON"(Ragged JSON)的经典困境——每条记录的字段结构不一致,传统方法处理起来极其痛苦。

但如果你用 DuckDB,这一切可以在 5 分钟内搞定。

DuckDB JSON 不规则数据处理架构

一、真实场景:电商平台的用户行为日志

假设你有一个 user_events.json 文件,每条记录格式如下:

{
  "event_id": "evt_8a7f3b",
  "user_id": 100234,
  "timestamp": "2026-08-24T14:32:10Z",
  "event_type": "purchase",
  "properties": {
    "product_id": "prod_9921",
    "product_name": "无线蓝牙耳机",
    "price": 299.00,
    "quantity": 1,
    "coupon_used": true,
    "tags": ["electronics", "audio", "sale"]
  },
  "device": {
    "type": "mobile",
    "os": "iOS",
    "app_version": "3.2.1"
  }
}

问题来了:这个 JSON 结构是不规则的——

  • 有些事件没有 device 字段
  • 有些 properties 里有 discount,有些没有
  • tags 数组长度不固定
  • 不同批次导出的字段可能完全不同

传统 Python 处理方式:

import json

results = []
with open('user_events.json') as f:
    for line in f:
        event = json.loads(line)
        try:
            results.append({
                'event_id': event['event_id'],
                'user_id': event['user_id'],
                'product_name': event['properties']['product_name'],
                'price': event['properties']['price'],
                # 如果某个字段缺失,直接 KeyError
            })
        except KeyError as e:
            print(f"Missing key: {e}")  # 然后手动处理几百个 KeyError

代码量巨大,维护成本极高,而且性能极差——10 万条数据可能要跑 8 秒以上。

二、DuckDB 方案:一行 SQL 搞定

2.1 直接读取,自动推断 Schema

DuckDB 内置了强大的 JSON 读取能力,read_json_auto 会自动推断 schema:

import duckdb

con = duckdb.ATTACH ("ecommerce.db")

# 直接读取 JSON 文件,自动推断结构
con.execute("""
---

## 本文信息

| 项目 | 内容 |
|------|------|
| DuckDB 版本 | v1.5.x(部分功能基于 v2.0 Preview) |
| 最后验证 | 2026-09-12 |
| 测试环境 | Linux / x86_64 / 16GB RAM |
| 官方文档 | [DuckDB Documentation](https://duckdb.org/docs/) |
| GitHub | [pengzz9527/duckdb-blog](https://github.com/pengzz9527/duckdb-blog) |

如发现错误,欢迎通过 [GitHub Issue](https://github.com/pengzz9527/duckdb-blog/issues) 或邮件 [email protected] 反馈。

📺 Watch video tutorials → Olap Studio YouTube

Subscribe for more DuckDB & AI automation tutorials