【问题标题】:enclosing all JSON Integer Values with double quotes "" using regular expressions使用正则表达式将所有 JSON 整数值用双引号 "" 括起来
【发布时间】:2014-09-10 10:50:15
【问题描述】:

我一直在为这个解决方案而烦恼,我有如下 JSON 字符串

{"Nodes":
    [
        {
            "Node_id": 10023
        },
        {
            "Node_id": 10056
        },
        {
            "Node_id":00000
        }
    ],
    "utc":136199375611
}

如何将其转换为以下格式

{"Nodes":
    [
        {
            "Node_id": "10023"
        },
        {
            "Node_id": "10056"
        },
        {
            "Node_id":"00000"
        }
    ],
    "utc":"136199375611"
}

现在我想用双引号“整数值”对所有整数值(曾经放在值中的值)进行编码,我如何使用 java 模式和匹配器类甚至子字符串类在正则表达式中做到这一点。您的帮助将不胜感激。


编辑

原始的 JSON 格式如下所示

{
    "Nodes": [
        {
            "Node_id": "10023",
            "count": 1
        },
        {
            "Node_id": "10056",
            "count": 2
        },
        {
            "Node_id": "+00000",
            "count": 1
        },
        {
            "Node_id": "-00000",
            "count": "6"
        }
    ],
    "utc": "136199375611",
    "DeliveryTime": "Tue 23rd jun 2014 12:45 AM",
    "Ifr": "2333"
}                    

【问题讨论】:

    标签: java regex json


    【解决方案1】:

    只是一个快速修复。

    jsonString.replaceAll("(\\d+)","\"$1\"")
    

    但我建议您使用适当的 JSON 解析器或 GSON 库将其解析为 Java 对象,然后将整数值转换为字符串,最后将该 Java 对象转换回 JSON 字符串。

    GSON Library

    示例代码:

    class NodesDetail{
        private ArrayList<NoteId> Nodes;
        private String utc;
    }
    
    class NoteId{
        private String Node_id;
    }
    
    ...
    NodesDetail obj = new Gson().fromJson(reader, NodesDetail.class);
    System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(obj));
    

    输出:

    {
      "Nodes": [
        {
          "Node_id": "10023"
        },
        {
          "Node_id": "10056"
        },
        {
          "Node_id": "00000"
        }
      ],
      "utc": "136199375611"
    }
    

    编辑

    只需根据 JSON 字符串编辑 POJO 类以匹配

    class NodesDetail{
        private ArrayList<NoteId> Nodes;
        private String utc;
        private String DeliveryTime;
        private String Ifr;
    }
    
    class NoteId{
        private String Node_id;
        private String count;
    }
    ...
    NodesDetail obj = new Gson().fromJson(reader, NodesDetail.class);
    System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(obj));
    

    输出:

    {
      "Nodes": [
        {
          "Node_id": "10023",
          "count": "1"
        },
        {
          "Node_id": "10056",
          "count": "2"
        },
        {
          "Node_id": "+00000",
          "count": "1"
        },
        {
          "Node_id": "-00000",
          "count": "6"
        }
      ],
      "utc": "136199375611",
      "DeliveryTime": "Tue 23rd jun 2014 12:45 AM",
      "Ifr": "2333"
    }
    

    【讨论】:

    • 感谢您的快速回复,@Braj 现在我有了这样的真实场景,原始 JSON 格式如下所示,'{ "Nodes": [ { "Node_id": "10023", "count":1 }, { "Node_id": "10056", "count":2 }, { "Node_id": "+00000", "count":1 } { "Node_id": "-00000", " count":"6" } ], "utc": "136199375611", "DeliveryTime":"Tue 23rd jun 2014 12:45 AM", "Ifr":"2333" }' ,如果我现在做 str 替换,有些是对的,有些是错的,对于这个,你将如何使用正则表达式来做到这一点。感谢 adV
    • 请将其发布在您的问题中作为最后的编辑。
    • 只在最后添加,不要替换现有文本。
    • 非常感谢,你能帮我在java中使用正则表达式吗
    • 当然为什么不,但你必须在上面发布单独的问题,因为这与这个问题无关。
    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 2018-12-16
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多