当json包含"}"时,Json解析异常

时间:2017-06-21 16:12:45

标签: java json parsing jackson

我有一个json,其中包含大括号作为字符串字段之一的值。我们正在使用fasterxml.jackson api来解析json并遇到错误。

JSON:

{
    "Message": {
        "header": {
            "correlationId": "c17da531-bf04-4cbf-9497-631353f9e8c5"
        },
        "body": {
            "log": {
                "id": "a8e5b716-1bc0-4829-bc47-1d28b4ff8920",
                "type": "}test"
            }
        }
    }
}

错误"意外的输入结束:期待字符串值的结束报价"

即使有}值作为值,我怎样才能继续解析?

2 个答案:

答案 0 :(得分:0)

您需要将json字符串转换为包含转义字符。

我的工作实例

String json = "{\n" +
                "    \"Message\": {\n" +
                "        \"header\": {\n" +
                "            \"correlationId\": \"c17da531-bf04-4cbf-9497-631353f9e8c5\"\n" +
                "        },\n" +
                "        \"body\": {\n" +
                "            \"log\": {\n" +
                "                \"id\": \"a8e5b716-1bc0-4829-bc47-1d28b4ff8920\",\n" +
                "                \"type\": \"}test\"\n" +
                "            }\n" +
                "        }\n" +
                "    }\n" +
                "}";

        JsonFactory factory = new JsonFactory();

        ObjectMapper mapper = new ObjectMapper(factory);
        JsonNode rootNode = mapper.readTree(json);

        Iterator<Map.Entry<String,JsonNode>> fieldsIterator = rootNode.fields();
        while (fieldsIterator.hasNext()) {

            Map.Entry<String,JsonNode> field = fieldsIterator.next();
            System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue());
        }

答案 1 :(得分:0)

您需要从json数据中转义}。比如\}。但是如果是这种情况你无法改变json(可能是你从某些API获取它),你可以在解析之前预处理json String。像

  • 您可以对此"\.*(\}).*"
  • 使用正则表达式
  • 然后只需从String中替换Group 1.匹配。