如何使用Jackson正确解析json对象到数组?

时间:2016-04-05 15:36:43

标签: java json spring jackson

我想问一下如何正确转换下一个json字符串。我有这个字符串:

{ “响应”:{ “元”:{ “命中”:1326, “时间”:55, “偏移”:0}, “文档”:[{ “的web_url”:“HTTP:// WWW。 nytimes.com/2016/04/05/fashion/china-luxury-goods-retail.html"},{"web_url":"http://www.nytimes.com/2016/04/05/fashion/luxury-货物retail.html“},...

我只想要“docs”数组。我正在以这种方式使用Jackson Converter:

    RestTemplate restTemplate=new RestTemplate();
    MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
    jsonConverter.setSupportedMediaTypes(Arrays.asList(new MediaType("text", "json", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET)));
    restTemplate.getMessageConverters().add(jsonConverter);
    ArrayList<WebUrl> topStories=restTemplate.getForObject(URL,Docs.class).getUrls();

这是我的文档课程:

@JsonIgnoreProperties(ignoreUnknown = true)

public class Docs {
  @JsonProperty("docs")
  private ArrayList<WebUrl> urls;

  public Docs(ArrayList<WebUrl> urls) {
     this.urls= urls;
  }

  public Docs(){

  }

  public ArrayList<WebUrl> getUrls() {
    return urls;
  }

  public void setUrls(ArrayList<WebUrl> urls) {
    this.urls=urls;
  }

 }

这是我的WebUrl.class

public class WebUrl {

@JsonProperty("web_url")
private String webUrl;

public WebUrl(){

}

public String getWebUrl() {
    return webUrl;
}

public void setWebUrl(String webUrl) {
    this.webUrl = webUrl;
}

public WebUrl(String webUrl) {

    this.webUrl = webUrl;
}
}

但是它给了我数组上的空指针异常。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你需要有类似下面的课程。正如@ cricket_007所提到的,你无法从中间提取出一些东西。

Result.Java

import com.fasterxml.jackson.annotation.JsonProperty;

 public class Result {
    @JsonProperty("response")
    public Response response;
}

Response.Java

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.ArrayList;
import java.util.List;

public class Response {
    @JsonProperty("docs")
    public List<Doc> docs = new ArrayList<Doc>();
}

Doc.java

import com.fasterxml.jackson.annotation.JsonProperty;

public class Doc {
    @JsonProperty("web_url")
    public String webUrl;
}

获得这些课程后,您可以按照以下方式调用该服务。

Result forObject = restTemplate.getForObject("yourURL", Result.class);

然后,从结果中,您可以提取URL列表。