如下面的代码:
public class Main { public class innerPerson{ private String name; public String getName(){ return name; } } public static void main(String[] args){ ObjectMapper om = new ObjectMapper(); Map<innerPerson, String> map = new HashMap<innerPerson,String>(); innerPerson one = new Main().new innerPerson(); one.name = "david"; innerPerson two = new Main().new innerPerson(); two.name = "saa"; innerPerson three = new Main().new innerPerson(); three.name = "yyy"; map.put(one, "david"); map.put(two, "11"); map.put(three, "true"); try { String ans = om.writeValueAsString(map); System.out.println(ans); } catch (JsonGenerationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
输出为:
{"Main$innerPerson@12d15a9":"david","Main$innerPerson@10a3b24":"true","Main$innerPerson@e91f5d":"11"}
是否可以将地图的键设置为准确的数据,而不仅仅是对象的地址?怎么样?
使用JSON时,可以在地图中将对象作为键吗?
严格没有。JSON 映射 数据结构是JSON 对象 数据结构,它是名称/值对的集合,其中元素名称必须是字符串。因此,尽管以映射的形式感知并绑定到JSON对象是合理的,但是JSON映射键也必须是字符串- 再次,因为JSON映射是JSON对象。JSON对象(地图)结构的规范可从http://www.json.org获得。
Costi正确描述了Jackson的默认映射键序列化程序的行为,该序列化程序仅调用toString()Java映射键的方法。除了修改toString()方法以返回地图键的JSON友好表示形式之外,用Jackson实施自定义地图键序列化也是可能且相当简单的。使用Jackson的序列化Map<Date,String>中提供了这样做的一个示例。
toString()
Map<Date,String>