[alibaba/fastjson]反序列化转义问题

2025-10-29 931 views
8
  1. JSONObject jsonObject = JSONObject.parseObject("{\"aaa\":\"\001\"}"); System.out.println(jsonObject);

为什么输出结果是: {"aaa":"\u0001"}

  1. JSONObject jsonObject = JSONObject.parseObject("{\"aaa\":\"\001\"}"); System.out.println(jsonObject); 为什么输出结果是:{"aaa":"\u000001"}

怎么给加上了\u0这样的字符串呢?

回答

8

\ 在json 中是特殊字符需要转义的, 不是 fastjson 的问题

6

怎么不让它给我转义 JSONObject jsonObject = JSONObject.parseObject("{\"aaa\":\"\001\"}"); System.out.println(jsonObject); 我想要的输出结果是:{"aaa":"\001"},而不是{"aaa":"\u0001"}

1

@545314690 你可以反其道而行之,先构建一个对象,然后序列化,看看生成的字符串是什么样的.

0

怎么不让它给我转义 JSONObject jsonObject = JSONObject.parseObject("{"aaa":"\001"}"); System.out.println(jsonObject); 我想要的输出结果是:{"aaa":"\001"},而不是{"aaa":"\u0001"}

在双引号内部,\ 是转义字符,单独一个\符号被双引号括起来后应该是"\\",因此你期望的 \001 字符串,被双引号括起来后应该是"\\001"。你需要传入的JSON字符串应该是:"{\"aaa\":\"\\\\001\"}"

    String str = "{\"aaa\":\"\\\\001\"}";
    JSONObject jsonObject = JSONObject.parseObject(str);
    System.out.println(jsonObject);  //{"aaa":"\\001"}

    Map map = JSONObject.parseObject( str, Map.class );
    System.out.println(map);  // {aaa=\001}