首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用genson解析嵌套JSON

用genson解析嵌套JSON
EN

Stack Overflow用户
提问于 2015-06-12 10:27:41
回答 1查看 1.3K关注 0票数 2

我正试图将从web获得的一些JSON解析为Java对象,并遇到一些问题。

下面是JSON:

代码语言:javascript
复制
{
  "d":{
     "results":[
        {
          "__metadata" { some metadata I'm not interested in },
          "attribute1":"attribute id 1",
          "attribute2:"attribute value 1"
        },
        {
          "__metadata" { some metadata I'm not interested in },
          "attribute1":"attribute id 2",
          "attribute2:"attribute value 2"
        }
      ]
   }
}

现在,我希望将以下数据映射到Java类,以便结果是一个Catalog对象,结果数组中的值是CatalogEntry对象:

代码语言:javascript
复制
public class Catalog {
  private final List<CatalogEntry> values;

  public Catalog() {
      values = null;
  }

  public Catalog(@JsonProperty("results") List<CatalogEntry> values) {
      super();
      this.values = values;
  }
}

public class CatalogEntry {
  private String attribute1;
  private String attribute2;

  public CatalogEntry() {}

  public CatalogEntry(@JsonProperty("attribute1") String attribute1, 
                      @JsonProperty("attribute2") String attribute2) {
    this.attribute1 = attribute1;
    this.attribute2 = attribute2;
  }
}

使用下面的行,我尝试将JSON字符串反序列化为Catalog对象:

代码语言:javascript
复制
Catalog catalog = genson.deserialize(json, Catalog.class);

之后,我尝试获取Catalog对象中的值,但得到一个NullPointerException,因为它似乎是空的。我认为反序列化与JSON中的"d“对象有问题,但是如何解决这个问题呢?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 12:28:46

问题是,您有两个构造函数,一个没有参数,另一个带有参数。在这种情况下,Genson选择空构造函数。由于属性是不可见的,并且没有setter,所以它不会填充值。

因此,如果希望Genson使用特定的构造函数,则必须用@JsonCreator对其进行注释。顺便说一句,您可以删除JsonProperty(“.”)如果使用此选项配置Genson,则在参数上:

代码语言:javascript
复制
Genson genson = new GensonBuilder()
  .useConstructorWithArguments(true)
  .create();

另一种选择是告诉Genson通过这样做来使用私有属性:

代码语言:javascript
复制
Genson genson = new GensonBuilder()
  .useFields(true, VisibilityFilter.PRIVATE)
  .create();

在这种情况下,您不需要构造函数上的注释,因为Genson将使用no arg one。我建议你第一种选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30800800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档