2016-04-05 10 views
0

次のjson文字列を正しく変換する方法をお聞きしたいと思います。私はこの文字列を持っています:jsonオブジェクトを正しく解析してJacksonと配列する方法はありますか?

{"応答":{"メタ":{"ヒット":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-goods-retail.html "}、...

と私は" docs "アレイのみをご希望です。

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

ですが、それは私にNULLポインタを与える:

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(); 

、ここでは、私のドキュメントクラスです:私はこの方法でジャクソンのコンバーターを使用しています配列の例外。これをどうすれば解決できますか?

+0

JSONの先頭から解析する必要があります。途中でドキュメントを抽出するだけでは問題ありません。たとえば、DocsクラスとMetaクラスを含むResponseクラスはどこにありますか? –

+0

私はJSONで多くの経験がないので、私はそれを行う必要があるか分からなかった。 – green

+0

DocsとWebUrlクラスを作成する方法を知りましたか? JSONをこのサイトにコピーするだけで、Jacksonクラスが生成されます。 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

関連する問題