2014-10-09 126 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