【发布时间】:2013-11-19 08:49:43
【问题描述】:
我有一小部分测试代码,我尝试将 Map 转换为 JSON 字符串并返回。从 JSON 字符串解析时,生成的映射包含字符串键“1”而不是整数键“1”,从而使测试失败。用作此映射键的 POJO 也会发生同样的情况。这是预期的行为还是我为 JSON 转换器省略了一些配置?
public class SampleConverterTest {
@Test
public void testIntegerKey() {
// Register an Integer converter
JSON.registerConvertor(Integer.class, new JSONPojoConvertor(Integer.class));
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "sample");
// Convert to JSON
String msg = JSON.toString(map);
// Retrieve original map from JSON
@SuppressWarnings("unchecked")
Map<Integer, String> obj = (Map<Integer, String>) JSON.parse(msg);
assertTrue(obj.containsKey(1));
}
}
我正在使用 jetty-util 7.6.10.v20130312
【问题讨论】:
-
根据定义,JSON 键是字符串。
-
JSON 键是 strings 一些 JSON 解析器会接受非标准 JSON,其中可能包括非字符串键,但最好坚持标准
-
这意味着没有 POJO 也可以用作键,对吗?在使用 Sample.class 作为键的情况下,我希望键被转换为 JSON 字符串,例如 {"class":"test.test.Sample","id":1} 但这不会发生在Map 的情况 --> JSON 字符串。
-
对于大多数 JSON 库,Map 是解析器将 JSON 转换为的默认实现。因此,从地图生成 JSON 时没有指定类。
标签: java json map integer converter