2014-10-09 204 views
-1
Java對象

我在這裏要求你的幫助頭痛一週後:S解析JSON與傑克遜

我需要用傑克遜

反序列化JSON這個輸出
{ 
    "data": [ 
     { 
     "id": "142065955831788", 
     "name": "Name1", 
     "link": "http://www.somelink.com", 
     }, 
     { 
     "id": "160212467350470", 
     "name": "Name2", 
     "link": "http://www.somelink2.com", 
     } 
     . 
     . 
     . 
} 

我發誓我嘗試了任何東西,但我不能讓傑克遜反序列化那個JSON。

我錯過了什麼?

編輯:

我創建了一個類是這樣的:

Data.class

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Data{ 

    @JsonProperty("data") 
    private String name; 

    @JsonProperty("data") 
    private String link; 

//Getters + Setters 

,這是我的映射

ObjectMapper mObjectMapper = new ObjectMapper(); 

     ArrayList<Data> mDataList; 

     mDataList = mObjectMapper.readValue(
       url, /* The url returning the JSON */ 
       mObjectMapper.getTypeFactory().constructCollectionType(
         ArrayList.class, Data.class 
       ) 
     ); 

而且我的代碼得到這個錯誤信息:

無法反序列化的java.util.ArrayList的實例進行START_OBJECT令牌

+0

請你能分享你的努力? – mreiterer 2014-10-09 13:54:09

+0

「我錯過了什麼?」 :錯誤信息可能? – ToYonos 2014-10-09 13:54:19

+0

這可能會幫助您瞭解如何反序列化http://stackoverflow.com/questions/19109719/json-object-conversion-to-java-object-using-jackson – 2014-10-09 13:56:06

回答

0

這裏是代碼 -

import org.codehaus.jackson.annotate.JsonIgnoreProperties; 
import org.codehaus.jackson.annotate.JsonProperty; 
import org.codehaus.jackson.map.ObjectMapper; 

@JsonIgnoreProperties(ignoreUnknown = true) 
class data { 

    @JsonProperty("id") 
    private String id ; 

    @JsonProperty("name") 
    private String name ; 

    @JsonProperty("link") 
    private String link; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getLink() { 
     return link; 
    } 

    public void setLink(String link) { 
     this.link = link; 
    } 

} 

public class aa { 

    public static void main(String[] args) { 
     ObjectMapper mapper = new ObjectMapper(); 

     try { 

      data[] d = mapper.readValue(
          "[{\"id\":\"142065955831788\",\"name\":\"Name1\",\"link\":\"http://www.somelink.com\"},{\"id\":\"160212467350470\",\"name\":\"Name2\",\"link\":\"http://www.somelink2.com\"}]", 
          data[].class); 

      for (data data1 : d) { 
       System.out.println("-----"); 
       System.out.println("Id : "+data1.getId()); 
       System.out.println("Name : "+data1.getName()); 
       System.out.println("Link : "+data1.getLink()); 
      } 


     } catch (IOException e) { 

      e.printStackTrace(); 

     } 

    } 
} 

你的JSON也需要改變。它不應該包含數據部分,因爲您正在使用其數組的屬性。

輸出 -

----- 
Id : 142065955831788 
Name : Name1 
Link : http://www.somelink.com 
----- 
Id : 160212467350470 
Name : Name2 
Link : http://www.somelink2.com 
+0

該代碼的作品,如果我沒有在我的JSON數據[]部分,但我不能修改JSON響應:( – ScumpinatoS 2014-10-09 15:11:06

+0

你有數據的權利..在你的問題有[在JSON中...另外,如果數組不存在,你可以使用'data d = mapper.readValue( 「{\」id \「:\」142065955831788 \「name \」:\「Name1 \」,\「link \」:\「http://www.somelink.com \」}「, data.class);' – 2014-10-10 05:20:56