当前位置: 首页 > 面试题库 >

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

傅正阳
2023-03-14
问题内容

如下面的代码:

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>中提供了这样做的一个示例



 类似资料:
  • 问题内容: 我一直在研究使用结构作为golang映射中的键。此结构中的一个字段也应该是一个映射,这似乎与此处提供的文档背道而驰,该文档只说那些具有可与之进行比较的字段且可以在用作映射中键的结构的字段中的结构。但是,我继续尝试以下方法: 输出为: 这似乎违反了文档,因为用作键的结构中的字段是映射。我似乎出了什么问题? 问题答案: 在您的示例中,映射键是指向结构的指针,而不是结构本身。即使指针指向的项

  • 嗨,我正面临着地图序列化的问题,其中关键是一个自定义类。

  • 问题内容: 手动生成JSON对象或数组时,通常在对象或数组的最后一项上留下逗号逗号会更容易。例如,从字符串数组输出的代码可能看起来像(在C ++中的伪代码中): 给你一个像 可以吗? 问题答案: 不幸的是,JSON规范不允许以逗号结尾。有几种浏览器可以使用它,但是通常您需要担心所有浏览器。 通常,我会尝试解决问题,并在实际值前添加逗号,因此最终得到的代码如下所示: for循环中多余的一行代码几乎不

  • 我创建了一个树映射,它的参数类型为Set,既有key-value,也有TreeSet,因此key和value对总是相互对应的。但我得到了一个错误: 下面是代码: 但是,当我使用键或值作为字符串(String,Set)或(Set,String)时,效果很好。 我不能同时拥有密钥和值作为集合吗?或者如果是,如何使用它们??

  • 我想解析一些JSON,但一个键要么是字符串,要么是对象。 这是我当前的结构:https://github.com/PhillippOhlandt/pmtoapib/blob/master/CollectionItemRequest.go#L10 在这里,“Url”属性不仅可以是字符串,还可以是对象。 我开始为它创建一个自己的结构,覆盖对象案例。 但是这样字符串版本就不行了。有没有一种方法既能处理这

  • 问题内容: 我有一些JSON数据,但所有键都为大写。如何解析它们并将键转换为更低的键?我正在使用jQuery。 例如: JSON数据: 所需的输出: 问题答案: 这个怎么样: 正则表达式捕获键名$ 1并将其转换为小写。 现场演示:http : //jsfiddle.net/bHz7x/1/ [edit]要解决@FabrícioMatté的评论,另一个仅匹配文字字符的演示: http //jsfid