2014-09-12 2 views
0

Mon code qui parse JSON:Parsing réponse JSON donne une valeur nulle

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);   
JsonNode rootNode = mapper.readTree(response.toString()); 
JsonNode entriesNode = rootNode.path("messages"); 
StoreMessageList objects = mapper.readValue(rootNode.toString(), new TypeReference<StoreMessageLis(){});  
Log.d("JacksonParser", objects.toString()); 

Ci-dessous est ma POJO classe:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class StoreMessageList { 

    private String location; 

    @JsonProperty("messages") 
    List<MessageList> messages; 

    public StoreMessageList() { 
    } 

    public StoreMessageList(String location, List<MessageList> messages) { 

     this.location = location; 
     this.messages = messages; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 

    public List<MessageList> getMessages() { 
     return this.messages; 
    } 

    public void setMessages(List<MessageList> messages) { 
     this.messages = messages; 
    } 
    @Override 
    public String toString() { 
     return "StoreMessageList:{location: " + location + ", messages: " + messages + "}"; 
    } 

    @JsonIgnoreProperties(ignoreUnknown = true) 
    public class MessageList implements Serializable{ 

     @JsonProperty("Text") 
     private String Text; 

     @JsonProperty("DetailPicture") 
     private String DetailPicture; 

     @JsonProperty("Title") 
     private String Title; 

     @JsonProperty("ListPicture") 
     private String ListPicture; 

     public MessageList() { 
     } 

     public MessageList(String Text, String DetailPicture, String Title, String ListPicture) { 
      this.Text = Text; 
      this.DetailPicture = DetailPicture; 
      this.Title = Title; 
      this.ListPicture = ListPicture; 

     } 

     public String getText() {  
      return this.Text; 
     } 

     public void setText(String text) { 
      this.Text = text; 
     } 

     public String getDetailPicture() { 
      return this.DetailPicture; 
     } 

     public void setDetailPicture(String detailPicture) { 
      this.DetailPicture = detailPicture; 
     } 

     public String getTitle() { 
      return this.Title; 
     } 

     public void setTitle(String title) { 
      this.Title = title; 
     } 

     public String getListPicture() { 
      return this.ListPicture; 
     } 

     public void setListPicture(String listPicture) { 
      this.ListPicture = listPicture; 
     } 

     @Override 
     public String toString() { 
      return "Messages:{Text: " + Text + ", DetailPicture: " + DetailPicture + ", ListPicture: " + ListPicture + 
         ", Title: " + Title + "}"; 
     } 

    } 
} 

S'il vous plaît, aidez-moi à obtenir les valeurs au lieu de valeur nulle. Réponse JSON:

{ 
    "_links": { 
     "self": { 
      "href": "http://10.1.1.228:8880/messages/1" 
     } 
    }, 
    "location": "ABC Store", 
    "messages": [ 
     { 
      "DetailPicture": "/images/2_detailpic.png", 
      "Text": "This is a dummy text. This is a dummy text. This is a dummy text. This is a dummy text. This is a dummy text. This is a dummy text. This is a dummy text. This is a dummy text. This is a dummy text. ", 
      "ListPicture": "/images/2_listpic.png", 
      "Title": "Test Title" 
     }, 
     { 
      "Text": "dummy dummy dummy", 
      "ListPicture": "/images/3_listpic.png", 
      "Title": "Test News" 
     }, 
     { 
      "Text": "dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text du", 
      "ListPicture": "/images/4_listpic.png", 
      "Title": "News 3" 
     } 
    ] 
} 
+0

Vous avez racine classe 'POJO', vous ne devez pas utiliser' JsonNode' du tout. Essayez avec ceci: 'StoreMessageList objects = mapper.readValue (response.toString(), StoreMessageList.class);' –

+0

Essayé mais cela donne ci-dessous Exception: 09-15 10: 18: 50.960: W/System.err (930): com.fasterxml.jackson.databind.JsonMappingException: Aucun constructeur approprié trouvé pour le type [type simple, classe com.out.show.data.StoreMessageList $ MessageList]: impossible d'instancier à partir d'un objet JSON (devez-vous ajouter/activer des informations de type?) 09-15 10: 18: 50.960: W/System.err (930): à [Source: {"_links": {"self": {"href": "http: \/\/10.1.1.228: 8880 \/messages \/1 "}}," emplacement ":" ABC Store "," messages ": [{" DetailPicture ":" \/images \/2_detailpic .... – user896732

Répondre

0

Votre MessageList classe est une classe interne. La classe interne qui n'est pas static ne peut pas exister sans instance de classe externe. À mon avis, vous devez marquer cette classe comme static et depuis que le code ci-dessous devrait fonctionner correctement:

ObjectMapper deserializerMapper = new ObjectMapper(); 
StoreMessageList root = deserializerMapper.readValue(json, StoreMessageList.class); 
System.out.println(root); 
+1

Merci Michal, cela fonctionne. – user896732