gpt4 book ai didi

java - 解析 JSON 字符串时避免转义

转载 作者:行者123 更新时间:2023-12-01 23:34:13 27 4
gpt4 key购买 nike

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

请建议一些方法来处理这个问题。

解析后,我尝试使用 StringEscapeUtils 对其进行转义。但它甚至正在转换其他特殊字符。一种方法是搜索字符串是否包含任何 unicode 字符并仅转义该部分。但特殊字符不固定。它可以是任何东西。

示例:

{
"orders": [
{
"name": "hello–world\ntext",
"type": "text\n"
},
{
"name": "hello",
"type": "text"
}
]
}

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

最佳答案

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

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,它将是:

String json = "{\"orders\":[{\"name\":\"hello–world\\ntext\",\"type\":\"text\\n\"},{\"name\":\"hello\",\"type\":\"text\"}]}";

使用ObjectMapper解析json:

ObjectMapper objectMapper = new ObjectMapper();    // package: com.fasterxml.jackson.databind
Map map = objectMapper.readValue(json, Map.class); // reading JSON as Map

现在,如果我们打印 map :

System.out.println(map);

打印:

{orders=[{name=hello–world
text, type=text
}, {name=hello, type=text}]}

You can see that it printed a new-line for \n

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

System.out.println(objectMapper.writeValueAsString(map));

打印:

{"orders":[{"name":"hello–world\ntext","type":"text\n"},{"name":"hello","type":"text"}]}

关于java - 解析 JSON 字符串时避免转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com