当前位置: 首页 > 知识库问答 >
问题:

解析JSON字符串时避免转义

贺景铄
2023-03-14

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

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

解析后,我尝试使用StringEscape eUtils取消转义。但它甚至正在转换另一个特殊字符。一种方法是搜索字符串是否包含任何Unicode字符并仅转义该部分。但是特殊字符是不固定的。它可以是任何东西。

例子:

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

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

共有1个答案

邴兴为
2023-03-14

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

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

现在,如果我们打印地图:

System.out.println(map);

它打印:

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

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

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

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

它打印:

{"orders":[{"name":"hello–world\ntext","type":"text\n"},{"name":"hello","type":"text"}]}
 类似资料:
  • 问题内容: 我有以下Json字符串 我正在尝试解析它并打印出每个名称和值-最简单的方法是什么?我尝试了jQuery.parseJSON但我不知道如何使用它 示例代码会很棒 问题答案: 结果是: jsFiddle示例:http://jsfiddle.net/bradchristie/XtzjZ/1/

  • 问题内容: 我正在处理一种加密货币RPC并接收json数据,如下所示: 使用Jsoncpp库或json11会将数字解析为。发生这种情况时,由于双重精度问题,结果为:。总的来说,这对金融交易来说是灾难性的,是不可接受的。 我已经有一个定点库,可以使用有效的字符串并将其在内部视为整数。有没有一种方法可以使Jsoncpp(或其他任何json库)将选定的数字json值用作字符串,以便可以使用固定精度正确地

  • 我们正在使用dexguard,并且在dexguard项目中还具有以下设置。文本 我还尝试了提供res/值/字符串的变体。类似xml的: 和 等 在小路上。但字符串的键值正在变得模糊。 正在返回0。(其中key是字符串值)。 我也试过了 避免字符串OBF指令的正确方法是什么?

  • 问题内容: 我正在尝试解析用PHP编码并通过TCP发送到C ++客户端的JSON字符串。 我的JSON字符串如下所示: 在C ++客户端上,我正在使用jsoncpp库: 问题是我没有得到任何输出,甚至没有关于解析的错误(如果有)。你能帮我了解我做错了什么吗? 问题答案: 您的问题是:没有 root [“ name”] 。您的文档应如下所示: 和你的代码是这样的: 如果您想按原样保留数据: 使用迭代

  • 问题内容: 我正在尝试解析java中的JSON字符串,以单独打印各个值。但是,在使程序运行时,出现以下错误- 我的班级看起来像- 让我知道我丢失了什么,或者为什么每次运行该应用程序时都会得到该错误。任何意见,将不胜感激。 问题答案: 看我的评论。当以 android.jar身份运行时,您需要包含完整的org.json库。仅包含要针对其进行编译的存根。 __ 此外,您还必须在JSON数据中删除额外的