Map<Integer, Object> map = new HashMap<>();
map.put(12, new ArrayList<>());
map.put(34, new ArrayList<>());
System.out.println(JSON.toJSONString(map));
//输出: {34:[],12:[]}
其中输出json的key不是String类型,造成生产环境损失
建议在下一个版本,将 SerializerFeature.WriteNonStringKeyAsString
设置为默认
6条答案
按热度按时间jfewjypa1#
这个目前有对应的参数吗?
bwntbbo32#
String s = JSON.toJSONString(map, SerializerFeature.WriteNonStringKeyAsString);
zi8p0yeb3#
@zhulc0914
你可以在程序入口处设置全局化配置,这样就不用在每个toJSONString设置feature
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNonStringKeyAsString.getMask();
但我认为作为通用组件产生非标准的JSON串是不科学的···
8ehkhllq4#
1.2.36 及以下版本都是标准的 json,升级以后变了变了。
fgw7neuy5#
@wenshao
温先生好,我看到
com.alibaba.fastjson.JSON#DEFAULT_GENERATE_FEATURE
被静态代码块初始化,所以JSON.DEFAULT_GENERATE_FEATURE
已经包含了一些缺省配置。可否在下个迭代中加入
SerializerFeature.WriteNonStringKeyAsString
的缺省配置吗?感谢!
0ejtzxu16#
RFC 4627 An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.
Deserialization errors may occur if the name is not a string, such as using Jackson or PHP, C# or other languages