【问题标题】:Convert a Map<Object, Object> to a Json String将 Map<Object, Object> 转换为 Json 字符串
【发布时间】:2010-08-12 01:08:50
【问题描述】:

假设我有这样的课程:

public class Person {
    private String firstName;
    private String lastName;
    ...
}

然后我创建一个这样的地图:

Map<Person, String> map = new HashMap<Person, String>();
map.put(new Person("Bob", "Builder"), "string1");
map.put(new Person("Bob", "NotBuilding"), "string2");

上述内容的有效 json 表示应该是什么样的?真的可以吗?

【问题讨论】:

  • 不要使用 Person(一个对象)作为散列键,给 Person 一些 id,并将其用作键。将 Person 本身存储在其他地方(也使用相同的 id 键入)。
  • 我正在创建一个自定义 json 框架,所以我真的没有办法强制人们可能做什么或不做什么。我只是好奇上面的地图将如何表示,而不是地图使用方式的有效性,尽管我确实理解你的观点。

标签: java json


【解决方案1】:

你应该首先对类 Person 有一个序列化/反序列化机制。例如,每个 Person 可能有一个唯一的 id,可以用作映射键。 Java 使用其hashCode() 将 Person 对象序列化为键。

【讨论】:

    【解决方案2】:
    { "Persons" : { "string1" : { "class" : "Person", "firstName" : "Bob", "lastName" : "Builder" }, "string2" : { "class" : "Person", "firstName" : "Bob", "lastName" : "NotBuilding" } } }
    

    这只是从 JSON 的角度来看,并假设您将地图命名为“Persons”。您需要找到一种方法来序列化和反序列化,但我想您可以在 java 中找到一种方法。

    【讨论】:

    • 为什么要将值映射到键,而不是将键映射到值?我想我的意思是我问我的问题的原因是,将诸如“Person”之类的对象转换为 Json 字符串会导致“name:value”对中的“name”无效,因为 Person 中嵌入了引号对象。
    • 哦,我是反过来的,不过,我认为使用 Person 字典作为键不会被认为是有效的 JSON。
    • 将 Person 字典用作键不会被认为是有效的 JSON,除非您对 Person 对象使用某种键并为值使用一个键,例如: { "key" : { "class" : "Person" ...}, "value" : "string1" }, ...
    猜你喜欢
    • 2020-12-26
    • 2015-01-10
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    相关资源
    最近更新 更多