Java 如何反序列化映射<;字符串,对象>;与格森

Java 如何反序列化映射<;字符串,对象>;与格森,java,serialization,gson,Java,Serialization,Gson,我对GSON相当陌生,并得到了这种格式的JSON响应(只是一个简单的示例,所以这些值没有意义): 我想让格森把它做成一张地图,PersonData显然是一个物体。名称字符串是PersonData的标识符 正如我所说的,我对GSON非常陌生,只尝试过以下方式: Gson gson = new Gson(); Map<String, PersonData> decoded = gson.fromJson(jsonString, new TypeToken<Map<String

我对GSON相当陌生,并得到了这种格式的JSON响应(只是一个简单的示例,所以这些值没有意义):

我想让格森把它做成一张地图,PersonData显然是一个物体。名称字符串是PersonData的标识符

正如我所说的,我对GSON非常陌生,只尝试过以下方式:

Gson gson = new Gson();
Map<String, PersonData> decoded = gson.fromJson(jsonString, new TypeToken<Map<String, PersonData>>(){}.getType());

非常感谢您的帮助:)

以下内容适合我

static class PersonData {
    int age;
    String surname;
    public String toString() {
        return "[age = " + age + ", surname = " + surname + "]";
    }
}

public static void main(String[] args) {
    String json = "{\"Thomas\": {\"age\": 32,\"surname\": \"Scott\"},\"Andy\": {\"age\": 25,\"surname\": \"Miller\"}}";
    System.out.println(json);
    Gson gson = new Gson();
    Map<String, PersonData> decoded = gson.fromJson(json, new TypeToken<Map<String, PersonData>>(){}.getType());
    System.out.println(decoded);
}

因此,您的
PersonData
类可能非常不同。

您可以使用
gson.toJsonTree(对象o)
将自定义对象转换为JSON格式

以下是我的作品:

private static class PersonData {
    private int age;
    private String surname;

    public PersonData(int age, String surname) {
        this.age = age;
        this.surname = surname;
    }
}

public static void main(String[] args) {
    PersonData first = new PersonData(24, "Yovkov");
    PersonData second = new PersonData(25, "Vitanov");

    Gson gson = new Gson();

    JsonObject jsonObject = new JsonObject();
    jsonObject.add("kocko", gson.toJsonTree(first));
    jsonObject.add("deyan", gson.toJsonTree(second));

    System.out.println(gson.toJson(jsonObject));

}
和打印:

{"kocko":{"age":24,"surname":"Yovkov"},"deyan":{"age":25,"surname":"Vitanov"}}

您的Json无效。在“Andy”之前需要一个逗号对不起,JSON绝对有效。我只是缩短了JSON,然后忘记了。更多的是关于GSON部分,关于如何将其解释为键值,其中value是GSON要序列化的对象。好的,我有另一个问题,很抱歉打扰了您的时间。我的课程类型中有一个错误,我甚至没有在这里发布,但您确认GSON部分工作帮助我认识到应该在哪里查看。谢谢@卢克森,不客气
Gson
的错误语句通常非常好。
BEGIN\u数组
BEGIN\u对象
数字
字符串
将指示Gson解析器实际读取的内容,而不是预期的内容。
{"Thomas": {"age": 32,"surname": "Scott"},"Andy": {"age": 25,"surname": "Miller"}}
{Thomas=[age = 32, surname = Scott], Andy=[age = 25, surname = Miller]}
private static class PersonData {
    private int age;
    private String surname;

    public PersonData(int age, String surname) {
        this.age = age;
        this.surname = surname;
    }
}

public static void main(String[] args) {
    PersonData first = new PersonData(24, "Yovkov");
    PersonData second = new PersonData(25, "Vitanov");

    Gson gson = new Gson();

    JsonObject jsonObject = new JsonObject();
    jsonObject.add("kocko", gson.toJsonTree(first));
    jsonObject.add("deyan", gson.toJsonTree(second));

    System.out.println(gson.toJson(jsonObject));

}
{"kocko":{"age":24,"surname":"Yovkov"},"deyan":{"age":25,"surname":"Vitanov"}}