一个外部 API 给我一个 JSON 对象,如下所示:
{
"@date": "1407436242",
"@duration": "2411",
"Entry": {
"@position": "3",
"@playerName": "fred"
}
}
如您所见,所有键都以 @ 符号开头,只有一个键除外,它是一个嵌套对象。我们正在使用 GSON 来解析 JSON,我正在尝试尽可能简单地执行此操作,而无需手动将每个键转换为有效的 Java 字段名称。
我目前正在尝试使用这段代码:
MyObject response = gson.fromJson(stringInput, MyObject.class);
这不匹配除 TournamentEntry 之外的任何字段。
我尝试添加一个 gson 字段命名策略,但这似乎是一种全有或全无的方法,并且无法处理某些键有“@”符号而有些键没有的情况。
我如何告诉 GSON 在转换为 Java 字段名称时去掉“@”符号,同时仍然处理没有 @ 符号的嵌套对象?
最佳答案
Gson 提供了 SerializedName应该允许使用那些时髦的 json 标识符的注释。这将使您的类(class)看起来像这样:
package com.example;
import com.google.gson.annotations.SerializedName;
import java.util.Date;
public class Event {
@SerializedName("@date")
private Date date;
@SerializedName("@duration")
private long duration;
@SerializedName("Entry")
private Entry entry;
}
和
package com.example;
import com.google.gson.annotations.SerializedName;
public class Entry {
@SerializedName("@position")
private int position;
@SerializedName("@playerName")
private String playerName;
}
@SerializedName 的优点在于它在每个字段的基础上工作,因此您只需要在需要时进行注释。
关于java - 使用 GSON,当某些键具有特殊字符时如何将 JSON 转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25582968/