有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式将字符串转换为json数组

当我执行rest模板时,我得到的是没有引号的原始json数组。如何将其转换为有效的json数组?我试过用下面的正则表达式

str.replace("([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)g", "\"$1\":\"$2\"")

它没有按预期工作。这是我的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
        }
    ]
}

如何将其转换为有效的json数组,以便正确解析。谢谢


共 (1) 个答案

  1. # 1 楼答案

    您需要小心:您不希望在数字量(如1)或特殊值(如null)周围放置双引号字符。以下程序分两部分进行更换。首先,它查找字典键并在其周围加引号:

    String json = s.replaceAll("\\b(\\w+)\\s*=\\s*", "\"$1\": ");
    

    这将查找以单词边界开头的单词字符,该边界由0个或多个空格组成,后跟=,后跟0个或多个空格,并在单词后面加上一个:和一个空格

    第二部分使用正向后向断言和反向前向断言查找字符串字典值:

    json = json.replaceAll("(?<=\": )(?!\\[|\\{|(?:(?:null|\\d+)[,}\n]))([^,}\n]*)", "\"$1\"");
    

    该值必须以":(正向前瞻断言)开头,但不能是[{null或数字(反向前瞻断言)中的任何一个。然后,我们将所有内容(包括但不包括下一个逗号、右大括号或换行符)作为要引用的值

    public class Test
    {
        public static void main(String[] args) {
            String s =  "{\n" +
                        "items = [{\n" +
                        "VALUE1 = 1,\n" +
                        "VALUE2 = v1,\n" +
                        "VALUE3 = high temp,\n" +
                        "VALUE4 = null\n" +
                        "\n" +
                        "}, {\n" +
                        "VALUE1 = 1,\n" +
                        "VALUE2 = v1,\n" +
                        "VALUE3 = low temp,\n" +
                        "VALUE4 = null\n" +
                        "}, {\n" +
                        "VALUE1 = 1,\n" +
                        "VALUE2 = v1.1,\n" +
                        "VALUE3 = Not valid,\n" +
                        "VALUE4 = null\n" +
                        "}]";
    [A-F0-9]{2}(:[A-F0-9]{2})*:?");
            String json = s.replaceAll("\\b(\\w+)\\s*=\\s*", "\"$1\": ");
            json = json.replaceAll("(?<=\": )(?!\\[|\\{|(?:(?:null|\\d+)[,}\n]))([^,}\n]*)", "\"$1\"");
            System.out.println(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
    }]