java - 反序列化更改内部节点的 JSON

标签 java android json gson

服务器发送一个 JSON。格式不同。 例如:

{
    "firstName": "X",
    "lastName": "XXX",
    "address": {
        "street": "John Street, 10",
        "postalCode": "12311"
    },
    "phoneNumbers": [
        "812 123-1234",
        "916 123-4567"
    ]
}

但是服务器可以发送另一个JSON

{
    "firstName": "X",
    "lastName": "XXX",
    "address": "John Street, 10",
    "postalCode": "101101",
    "phoneNumber": "812123-1234"
}

还有我的 Format1.java

public class Format1 {
    @SerializedName("firstName")
    public String firstName;

    @SerializedName("lastName")
    public String lastName;

    @SerializedName("address")
    public Address address;

    public class Address {
        @SerializedName("street")
        public String street;

        @SerializedName("postalCode")
        public String postalCode;
    }

    @SerializedName("phoneNumbers")
    public String[] phoneNumbers;
}

和Format2.java

public class Format2 {
    @SerializedName("firstName")
    public String firstName;

    @SerializedName("lastName")
    public String lastName;

    @SerializedName("street")
    public String street;

    @SerializedName("postalCode")
    public String postalCode;

    @SerializedName("phoneNumber")
    public String phoneNumber;
}

应用程序不知道将从服务器收到什么答复。 Gson 如何理解要使用什么类?

最佳答案

如果您确定在 Format1 中成员名称是“phoneNumbers”,而在 Format2 中则是“phoneNumber”。您可以先查看 JSON 字符串来决定应该使用哪种类型的格式类。

更公平的方法可能是创建您自己的反序列化器方法并检查其中的名称和类型。

关于java - 反序列化更改内部节点的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20254329/

相关文章:

android - HTC Incredible 显示空白 ImageView

javascript - 如何使用 FB FQL 多查询的结果?

java - 为什么我会收到 ClassCastException

java - 无法从 WicketStuff : MultiFileUploadField. java 中找到资源 org.apache.wicket.mfu.delete

android - 这个 Error : ENOENT: no such file or directory, 打开是什么类型的错误

javascript - 如何使用 angularjs 填充 json 数据?

javascript - 只有元组时如何从 JSON 将数据加载到 D3 图表

Java 反射与克隆

java - Android Studio 操作栏未显示在新 Activity 中

android - 如何使用 rxjava 在改造 2.0 中获取请求 url?