首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析JSON字符串时避免转义

解析JSON字符串时避免转义
EN

Stack Overflow用户
提问于 2019-10-08 06:01:55
回答 1查看 1.5K关注 0票数 0

我有一个输入json字符串,包含一些已经转义的特殊字符和一些不转义的特殊字符(如en-破折号/em-破折号)。解析此json字符串(需要解析此字符串以检索对象数组)之后,它将具有特殊字符的字符串转换为Unicode值(例如,en-破折号字符为\u 2013)。我的要求是不要转义任何特殊的字符,并保持其他已经转义的字符。简单地说,在解析JSON字符串之后,内容不应该改变。

请建议一些方法来处理这件事。

解析之后,我尝试使用StringEscapeUtils取消它的转义。但它正在改变甚至另一个特殊的角色。一种方法是搜索字符串,如果包含任何unicode字符,并且只转义该部分。但特殊字符不是固定的。它可以是任何东西。

示例:

代码语言:javascript
复制
{
    "orders": [
        {
            "name": "hello–world\ntext",
            "type": "text\n"
        },
        {
            "name": "hello",
            "type": "text"
        }
    ]
}

对于上面的字符串,当我使用org.json.simple进行解析时,它是将endash字符转义到"hello\u2013world\ntext"作为name字段。有没有办法在解析时限制特殊字符的转义。

EN

回答 1

Stack Overflow用户

发布于 2019-10-08 06:37:12

您可能没有正确地解析JSON。我尝试使用ObjectMapper将提供的JSON解析为Map (您也可以使用class ):

代码语言:javascript
复制
String json = "{\n" +
        "    \"orders\": [\n" +
        "        {\n" +
        "            \"name\": \"hello–world\\ntext\",\n" +
        "            \"type\": \"text\\n\"\n" +
        "        },\n" +
        "        {\n" +
        "            \"name\": \"hello\",\n" +
        "            \"type\": \"text\"\n" +
        "        }\n" +
        "    ]\n" +
        "}";

对于未格式化的json,如下所示:

代码语言:javascript
复制
String json = "{\"orders\":[{\"name\":\"hello–world\\ntext\",\"type\":\"text\\n\"},{\"name\":\"hello\",\"type\":\"text\"}]}";

使用ObjectMapper解析json

代码语言:javascript
复制
ObjectMapper objectMapper = new ObjectMapper();    // package: com.fasterxml.jackson.databind
Map map = objectMapper.readValue(json, Map.class); // reading JSON as Map

现在,如果我们打印map

代码语言:javascript
复制
System.out.println(map);

它打印:

代码语言:javascript
复制
{orders=[{name=hello–world
text, type=text
}, {name=hello, type=text}]}

您可以看到它为\n打印了一个新行。

现在,如果我们打印map的实际值:

代码语言:javascript
复制
System.out.println(objectMapper.writeValueAsString(map));

它打印:

代码语言:javascript
复制
{"orders":[{"name":"hello–world\ntext","type":"text\n"},{"name":"hello","type":"text"}]}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58280910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档