java - 使用 JSON 时,我们可以将对象作为 map 中的键吗?

标签 java json jackson

如下代码:

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

是否可以使 map 的键是精确的数据而不是对象的地址?怎么样?

最佳答案

Can we make object as key in map when using JSON?

严格来说,不。 JSON map 数据结构是 JSON object 数据结构,它是名称/值对的集合,其中元素名称必须是字符串。因此,尽管将 JSON 对象作为映射来感知和绑定(bind)是合理的,但 JSON 映射键也必须是字符串——同样,因为 JSON 映射是 JSON 对象。 JSON 对象(映射)结构的规范可在 http://www.json.org 获得。 .

Is it possible to make the key of the map be exact data but not object's address only? How?

Costi 正确描述了 Jackson 的默认映射键序列化程序的行为,它只是调用 Java 映射键的 toString() 方法。无需修改 toString() 方法以返回映射键的 JSON 友好表示,还可以使用 Jackson 实现自定义映射键序列化并且相当简单。 Serializing Map<Date, String> with Jackson 上提供了一个这样做的示例。 .

关于java - 使用 JSON 时,我们可以将对象作为 map 中的键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11628698/

相关文章:

java - Gson 反序列化 :Json Field Name Different from Java Object Field Name

java - Jackson 在尝试映射没有类元素的 JSON 时崩溃

java - jackson JsonDeserializer stackoverflow

java - 在 Hibernate 中设置参数值时指定字符串类型

java - 在字符串中使用 new 运算符创建两个对象有什么好处

hadoop - copyFromLocalFile 在 CDH4 中不起作用

python - 将 JSON 读入 pandas DataFrame 并添加/合并它们

java - 防止java web应用程序中的xss攻击,同时将实际值保存在数据库中

javascript - 如何访问这个 JSON 值?

java - 无法将 JSON 映射到 Java bean