2016-04-05 128 views
0

我想問一下如何正確轉換下一個json字符串。我有這個字符串:如何正確解析json對象到Jackson的數組?

{「response」:{「meta」:{「hits」:1326,「time」:55,「offset」:0},「docs」:[{「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-goods-retail.html「},...

我只想要」docs「數組。我以這種方式使用傑克遜轉換器:

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; 
} 
} 

但它給我的空指針陣列上的異常。我怎樣才能解決這個問題?

+0

你需要從JSON的頂部解析,你不能從中間提取文檔。例如,Response類將包含Docs類和Meta類在哪裏? –

+0

我對JSON沒有太多的經驗,所以我不知道我應該這樣做。 – green

+0

那你是怎麼知道創建Docs和WebUrl類的?只需將您的JSON複製到本網站,即可爲您生成傑克遜課程。 http://www.jsonschema2pojo.org –

回答

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列表。

+0

我的工作很完美。這也爲我澄清了很多。謝謝。 – green

+0

列表是!對象[] NO; – Neftanic