【问题标题】:How to deserialiaze json object with nested json array如何使用嵌套的 json 数组反序列化 json 对象
【发布时间】:2019-09-03 09:08:49
【问题描述】:

我是 Java 新手,我正在尝试使用 gson 库反序列化具有嵌套 Json 对象数组的 Json 对象,但面临一些困难。

需要一些关于如何使用 gson 库以正确方式执行此操作的帮助吗?

POJO:

@JsonRootName(value = "Error")
public class ErrorData {

    private String Source;
    private String ReasonCode;
    private String ErrorCode;
    private String Description;
// getters and setters
}

@JsonRootName(value = "Errors")
public class ErrorsDataRes {
    @SerializedName("Error")
    private List<ErrorData> Error;
// getters and setters
}

主要:

public static void main(String[] args) throws Exception {
        String data =
 "{\"Errors\":{\"Error\":[{\"Source\":\"INPUT\",\"ReasonCode\":\"INVALID_FIELD_VALUE\",\"ErrorCode\":\"E0001\",\"Description\":\"Invalid Field Value\"}]}}";
        Gson gson = new GsonBuilder().create();
        ErrorsDataRes errors = gson.fromJson(data, ErrorsData.class);
}

我希望将 Json 字符串反序列化为我的 ErrorsDataRes 对象,但结果是一个空对象。有什么想法吗?

【问题讨论】:

  • 输出只有 ErrorsDataRes.class。输入有 2 层嵌套。您正在寻找的是 1 级嵌套 - 直接从 {\"Error\":[{\"Source\":\"INPUT\"...
  • 如果有帮助请投票!

标签: java json gson json-deserialization


【解决方案1】:

POJO 类不正确。请试试这个。

POJO:

 public class ErrorData {
    @SerializedName("Source")
    private String Source;
    @SerializedName("ReasonCode")
    private String ReasonCode;
    @SerializedName("ErrorCode")
    private String ErrorCode;
    @SerializedName("Description")
    private String Description;
}
public class ErrorsData {
    @SerializedName("Error")
    private List<ErrorData> Error;
   //getters and setters
}

public class ErrorsDataRes {

    @SerializedName("Errors")
    private ErrorsData errors;
}

public static void main(String[] args) {
        String data =
                "{\"Errors\":{\"Error\":[{\"Source\":\" INPUT\",\"ReasonCode\":\"INVALID_FIELD_VALUE\",\"ErrorCode\":\"E0001\",\"Description\":\"Invalid Field Value\"}]}}";
        Gson gson = new GsonBuilder().create();
        ErrorsDataRes errors = gson.fromJson(data, ErrorsDataRes.class);
        System.out.println(errors);
    }

【讨论】:

  • 谢谢,我没有考虑 2 级嵌套结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多