2014-10-09 4 views
-1

Я здесь прошу вашу помощь после одной недели головной боли: SАнализировать JSON в Java объект с Джексоном

Мне нужна десериализация этого JSON выхода с помощью Джексон

{ 
    "data": [ 
     { 
     "id": "142065955831788", 
     "name": "Name1", 
     "link": "http://www.somelink.com", 
     }, 
     { 
     "id": "160212467350470", 
     "name": "Name2", 
     "link": "http://www.somelink2.com", 
     } 
     . 
     . 
     . 
} 

Я клянусь, я имею попробовал что-нибудь, но я просто не могу заставить Джексона десериализовать этот JSON.

Что мне не хватает?

EDIT:

Я создал класс, как это:

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

+0

«Что мне не хватает?» : возможно, сообщение об ошибке? – ToYonos

+0

Это может помочь вам понять, как десериализовать http://stackoverflow.com/questions/19109719/json-object-conversion-to-java-object-using-jackson –

ответ

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

Этот код работает, если у меня нет данных [data] в моем JSON, но я не могу изменить ответ JSON :( – ScumpinatoS

+0

You есть массив данных правильно .. на ваш вопрос есть [в JSON ... Также, если массив не существует, вы можете получить один объект, используя 'data d = mapper.readValue ( " {\ "id \": \ "142065955831788 \ ", \" name \ ": \" Name1 \ ", \" link \ ": \" http: //www.somelink.com \ "}", data.class); ' –

Смежные вопросы