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

使用正则将RestTemplate返回的无引号原始JSON数组转为合法JSON数组

解决非标准类JSON格式转合法JSON的问题

我来帮你搞定这个问题!你拿到的是一种类JSON但不符合标准规范的格式——它用=代替了JSON的:,而且字符串类型的键和值都没加双引号,这也是你之前正则没生效的核心原因。

先分析下你之前的正则问题:

  • 没有处理键和=之间的空格(原始数据里是VALUE1 = 1,不是VALUE1:1);
  • 匹配范围没覆盖带空格的值(比如high temp);
  • 没有把=替换成:;
  • 正则语法细节问题(比如Java里replaceAll不需要在正则末尾加g,全局替换是默认行为)。

分步解决方案(以Java为例)

我们可以通过多步正则替换来把非标准格式转换成合法JSON,步骤清晰且容易调试:

String rawData = "{ items = [ { VALUE1 = 1, VALUE2 = v1, VALUE3 = high temp, VALUE4 = null }, { VALUE1 = 1, VALUE2 = v1, VALUE3 = low temp, VALUE4 = null }, { VALUE1 = 1, VALUE2 = v1.1, VALUE3 = Not valid, VALUE4 = null } ] }";

// 1. 把键+等号的组合,替换为带引号的键+冒号
String step1 = rawData.replaceAll("(\\w+)\\s*=\\s*", "\"$1\": ");

// 2. 给非数字、非null的字符串值添加双引号
// 排除null、整数、小数,只给纯文本/带空格的文本加引号
String step2 = step1.replaceAll("(?<=: )(?!null|-?\\d+(\\.\\d+)?)([a-zA-Z\\s.-]+)", "\"$1\"");

// 3. 清理多余空格,让JSON格式更严谨(可选但推荐)
String validJson = step2.replaceAll("\\s+,", ",").replaceAll(",\\s+}", "}");

// 输出合法JSON
System.out.println(validJson);

每一步的作用说明

  1. 第一步替换键和等号:
    正则(\w+)\s*=\s*会匹配所有类似VALUE1 = 的结构,将其替换为"VALUE1": ,解决键的引号问题和=转:的问题。

  2. 第二步给值加引号:
    这个正则做了精准匹配:

    • (?<=: ):确保匹配的内容前面是:加空格(也就是值的位置);
    • (?!null|-?\\d+(\\.\\d+)?):排除null、整数、小数这些不需要加引号的JSON值;
    • ([a-zA-Z\\s.-]+):匹配字母、空格、点、横杠组成的文本值,给它们加上双引号。
  3. 第三步清理空格:
    处理值后面可能带的多余空格(比如"high temp" ,变成"high temp",),让最终的JSON更规范。

转换后的合法JSON结果

{ "items": [ { "VALUE1": 1, "VALUE2": "v1", "VALUE3": "high temp", "VALUE4": null }, { "VALUE1": 1, "VALUE2": "v1", "VALUE3": "low temp", "VALUE4": null }, { "VALUE1": 1, "VALUE2": "v1.1", "VALUE3": "Not valid", "VALUE4": null } ] }

如果你的数据后续出现其他特殊字符(比如值里包含引号、括号),可以再调整正则的匹配范围,但针对你当前提供的原始数据,这个方案完全可行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:32:32