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

如何使用正则表达式合并JSON中多个同名item字段值为数组

解决方案

首先明确前提:你拿到的输入不符合标准JSON规范,标准JSON不允许同级存在同名字段,常规JSON解析器会自动覆盖重复字段仅保留最后一个取值,因此只能通过字符串正则预处理的方式处理。

你之前写的正则硬编码了3组item字段的匹配规则,只能适配恰好3个重复字段的场景,换成全局匹配收集所有取值的方式即可适配任意数量的同名字段。


通用正则逻辑

不需要固定长度的捕获组,开启正则全局匹配模式后,用以下规则匹配所有item字段:

  • 匹配正则:"item":"([^"]*)"
  • 逻辑说明:全局模式下该正则会依次匹配每一个item字段,捕获组1对应每个item的取值,把所有捕获到的取值收集到数组中,最后拼接成你需要的"item": ["val1","val2",...]格式即可。

代码示例(Python)

仅提取合并后的item字段

import re

# 示例输入
raw_str = '{"item":"A","item":"B","item":"C"}'
# 全局匹配所有item的取值
item_values = re.findall(r'"item":"([^"]*)"', raw_str)
# 生成目标格式
result = f'"item": {str(item_values).replace("'", '"")}'
print(result)
# 输出:"item": ["A","B","C"]

保留其他字段,整串转换为标准JSON

如果输入中还有其他非重复字段,需要整体转换为合法JSON,可以用以下方式实现:

import re
from collections import defaultdict

# 带其他字段的示例输入
raw_str = '{"id":"123","item":"A","item":"B","name":"test","item":"C"}'
fields = defaultdict(list)
# 匹配所有键值对
for match in re.finditer(r'"([^"]+)":"([^"]*)"', raw_str):
    key, value = match.groups()
    fields[key].append(value)
# 组装标准JSON
res_parts = []
for key, values in fields.items():
    if len(values) == 1:
        res_parts.append(f'"{key}":"{values[0]}"')
    else:
        res_parts.append(f'"{key}":{str(values).replace("'", '"')}')
final_standard_json = "{" + ",".join(res_parts) + "}"
print(final_standard_json)
# 输出:{"id":"123","item":["A","B","C"],"name":"test"}

注意:如果你的item取值里包含转义的双引号(比如"item":"a\"b"),把匹配取值的部分替换为"((?:\\.|[^"\\])*)"即可适配转义场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:15:06