java - 将 JSON 类反序列化为不同名称的 Java 类

标签 java json gson

我之前的问题并没有真正得到任何结果,也许我没有问正确的问题或者它太详细了。

现在我的基本问题是,如何将具有一个类名的 JSON 对象反序列化为具有不同类名的 Java 对象?

例如,服务器发送/期望的 JSON 类是“18”(我对此的控制权为零)。我的 Java 类不能是“18”,所以是“_18”。

即使使用不同的命名策略,简单地执行 new Gson().fromJson() 也没有帮助; _18 对象始终为 null。我已经阅读了有关类型适配器和不同注释的内容,但仍不清楚如何解决这个问题。看起来最明智的方法 @SerializedName 显然不能用于类本身,只能用于字段成员。

如何将具有名为 18 的类的 JSON 对象反序列化为名为 _18 的 Java 类(或者更好的是,如果可能的话,我可以为该类提供真实名称)?

示例 JSON,根据请求:

"18": {
    "field1": "value1",
    "field2": "value2",
    "field3": "value3"
}

最佳答案

首先 - JSON 没有类的概念 - 它是对象的字符串表示形式。 所以,你的例子只是一个格式错误的 JSON。它一定是这样的:

{"18":
 {
  "field1": "value1",
  "field2": "value2",
  "field3": "value3"
  }
}

这是具有字段“18”的有效 JSON 对象,属于另一个具有 field1field2field3 属性的类。

所以,如果服务器返回像您的节目一样的 JSON 字符串 - 要解析它,您必须用 {} 包围它,然后您的 Java 类将具有“18”属性,因为您想通过 @ 将其命名为 Java SerializedName 注释。

请参阅下面的示例测试用例:

public static  void main(String... args) throws Exception {

    String testJson = "{\"18\":{\"name\":\"poomba\",\"value\":\"topchoomba\"}}";

    Gson gson = new GsonBuilder().create();

    MyClassFor18 test18 = gson.fromJson(testJson, MyClassFor18.class);

    System.out.println(test18);

}

private static class MyClassFor18 {

    @SerializedName ("18")
    private TestPojo valueObject;

    public TestPojo getValueObject() {
        return valueObject;
    }

    public void setValueObject(TestPojo valueObject) {
        this.valueObject = valueObject;
    }

    @Override
    public String toString() {

        return "MyClassFor18 (value=" + valueObject + ")";
    }

}
private static class TestPojo {

    private String name;
    private String value;

    public TestPojo(String name, String value) {

        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public String toString() {

        return "TestPojo { name=" + this.name + ", value=" + this.value
                + "}";
    }
}

关于java - 将 JSON 类反序列化为不同名称的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47539267/

相关文章:

java - Hibernate 可以生成大写 SQL 吗?

javascript - 如何使用 JSON 将 C# 对象转换为 Javascript 数组数组?

java - 将 java 对象转换为 CSV

java - 当 JSON 没有变量名时使用 gson 反序列化

java - 简单但复杂的 HQL/SQL 查询

java - 如何使用 Spring JDBCTemplate 从唯一约束违规中恢复?

java - 使用http组件解析http请求服务器端

Javascript用html unicode替换tab字符进行JSON解析

在 C 中将 Protocol Buffer 与 JSON 相互转换,而不生成 C 代码

javascript - 使用 GSON 解析 JS(带函数)