一尘不染

使用JSON时,可以在地图中将对象作为键吗?

json

如下面的代码:

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"}

是否可以将地图的键设置为准确的数据,而不仅仅是对象的地址?怎么样?


阅读 222

收藏
2020-07-27

共1个答案

一尘不染

使用JSON时,可以在地图中将对象作为键吗?

严格没有。JSON 映射 数据结构是JSON 对象
数据结构,它是名称/值对的集合,其中元素名称必须是字符串。因此,尽管以映射的形式感知并绑定到JSON对象是合理的,但是JSON映射键也必须是字符串-
再次,因为JSON映射是JSON对象。JSON对象(地图)结构的规范可从http://www.json.org获得

是否可以将地图的键设置为准确的数据,而不仅仅是对象的地址?怎么样?

Costi正确描述了Jackson的默认映射键序列化程序的行为,该序列化程序仅调用toString()Java映射键的方法。除了修改toString()方法以返回地图键的JSON友好表示形式之外,用Jackson实施自定义地图键序列化也是可能且相当简单的。使用Jackson的序列化Map<Date,String>中提供了这样做的一个示例。

2020-07-27