如何在 Java 中使用正则表达式将引号不一致的无效 JSON 之类的字符串转换为有效的 JSON?

How to convert invalid JSON like string with inconsistent quotes into a valid JSON using regex in Java?

这是一个示例字符串。由于存在逗号,我在 'rgba(71,13,226,0.47)' 部分尤其遇到麻烦。同样的正则表达式也应该解析一个 JSON 数组,比如 string.

varStr ="{
    red : {
        orange: 100,
        dates: {
            later: "4_WEEK",
            now:   "1_WEEK"
        },
        pink: {
            crimson : '#16gcvcn',
            lavender : '#47vdsaj',
            purple : '#h7465',
            baby pink : '#hd576',
            yellow : 'rgba(71,13,226,0.47)',
            magenta : 'rgba(211,25,25,0.01)'
        }
    }
}";

到目前为止,我有一系列的正则表达式替换,但我的正则表达式存在问题,它不能处理所有情况。

    varStr = varStr.replaceAll("([^:{,\"\n =\[}\]][\w &|\/'.\-)#]+)", "\"\"");
    varStr = varStr.replace("\"[", "[");
    varStr = varStr.replace("]\"", "]");
    varStr = varStr.replaceAll("'", "\"");

我想首先向您指出,以这种方式将字符串转换为 JSON 会将每个值视为 StringNumberBoolean 等一些数据类型在反序列化时将被忽略并失去其便利性。

您可以按如下方式实现您想要的,如果我能找到更优雅的解决方案,我将更新我的解决方案!

代码片段

String regex = "(?:[{ ])(\w+)(?!\")";
varStr = varStr.replaceAll(regex, "\\"\\"");
varStr = varStr.replace("\"\"", " ").replace("'", "\"");

顺便说一句,尽管 JSON 没有标准的命名约定,但我从未见过用空 space(s) 分隔的字段名称。因此,最好使用babyPinkbaby_pinkbaby-pink中的一种。