fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG]将Map<Integer,String>对象序列化时没有生成正确的Json字符串

Open milkmikVC opened this issue 9 months ago • 2 comments

问题描述

在将Map<Integer,String>对象序列化时没有生成正确的Json字符串,生成的字符串中,键是不带引号的,这不符合JSON字符串的标准

环境信息

请填写以下信息:

  • OS信息: [e.g.:Windows11]
  • JDK信息: [e.g.:Openjdk 23.0.1]
  • 版本信息:[e.g.:Fastjson2 2.0.56]

重现步骤

如何操作可以重现该问题:

  1. map.put(1, "管理员"); map.put(2, "普通用户");
  2. 使用 JSON.toJSONString(map) 方法
  3. 输出字符串为 {1:"管理员",2:"普通用户"} 不符合JSON字符串格式
Map<Integer, String> map = new HashMap<>();
map.put(1, "管理员");
map.put(2, "普通用户");
String json = JSON.toJSONString(map);
System.out.println(json); // 输出 {1:"管理员",2:"普通用户"}(键无引号)

期待的正确结果

正确结果应该生成符合JSON字符串格式 如:{"1":"管理员","2":"普通用户"}

相关日志输出

请复制并粘贴任何相关的日志输出。

附加信息

Image

milkmikVC avatar Mar 25 '25 15:03 milkmikVC

我在其他issue中看见了和你相似的错误3212 你可以试试这个 JSON.toJSONString(map, JSONWriter.Feature.WriteNonStringKeyAsString);

2435044287 avatar Mar 28 '25 01:03 2435044287

我以为是fastjson2升级出来的新bug呢, 然后在fastjson1的1.2.83版本下, 也测试了一下, 竟然也是一样的结果。 也是数字key,不带引号的。

cmshome avatar Apr 24 '25 02:04 cmshome