2015-07-21 64 views
0

我需要此JSON解析器的幫助。我有一個容器,裏面有我想要獲得的評論。這是我有的JSON字符串代碼:http://www.jsoneditoronline.org/?id=b73dc60acd235f60a647c02ed3e068db 我需要從「resources」字段(content,id,creator)的每個註釋中獲取屬性。我試過了,在另一件事之間,我無法得到我想要的。我無法解析這個JSON代碼,我怎麼能做到這一點?

public class CommentsParser { 

    public List<Comment> readJsonStream(InputStream in) throws IOException { 
     // Nueva instancia JsonReader 
     System.out.println("Longitud del inputStream para comentarios: "+ in.toString().length()); 
     //Vemos lo que ha leido del inputStream 
     JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8")); 
     StringWriter writer = new StringWriter(); 
     IOUtils.copy(in, writer, "UTF-8"); 
     String linea = writer.toString(); 
     System.out.println("El is contiene: "+linea); // Lo que recibe en el inputStream 
     //Vemos lo que ha leido del reader. 
     System.out.println("El reader contiene: "+ reader.toString()); 
     try { 
      // Leer Array 
      return leeArrayComentarios(reader); 
     } finally { 
      reader.close(); 
     } 

    } 
    public List<Comment> leeArrayComentarios(JsonReader reader) throws IOException { 
     // Lista temporal 
     List<Comment> listaComentarios = new ArrayList<Comment>(); 

     listaComentarios = formatComentario(reader); 

     return listaComentarios; 

    } 

    public List<Comment> formatComentario(JsonReader reader) throws IOException { 

     List<Comment> listaComentarios = new ArrayList<Comment>(); 
     String situacion; 
     Comment comentario = new Comment(); 
     //System.out.println("Estamos en: "+ reader.nextString()); 
     //System.out.println("Estamos en: "+ reader.nextName()); 

     //reader.beginObject(); 
     while (reader.hasNext()) { 
      String campo = reader.nextName(); 
      System.out.println("El objeto es:"+campo); 
      switch (campo) { //Cuando intenta parsear no encuentra estos case y entonces devuelve a null el usuario. 
       /*case "content": 
        Name nombre = new Name(); 
        comentario.setContent(reader.nextString()); 
        break; 
       case "isRecomment": 
        comentario.setIsRecomment(reader.nextBoolean()); 
        break; 
       case "creator": 
        ActiveElement creador = new ActiveElement(); 
        creador.setId(reader.nextLong()); 
        comentario.setCreator(creador);*/ 
      case "_embebed": 
       situacion = reader.nextName(); //Deberiamos pasar a resources 
       //Una vez en resources tenemos una array de comentarios. 

       System.out.println("Estamos en: "+ reader.nextString()); 
       reader.beginArray(); 
       while (reader.hasNext()) { 
        // Leer objeto 
        System.out.println("Dentro While.Estamos en: "+ reader.nextName()); 
       } 
       default: 
        reader.skipValue(); 
        break; 
      } 
     } 
     reader.endObject(); 
     return listaComentarios; 
    } 

}

編輯1 - 應用GSON:

public CommentContainer jsonToJava(String json){ 
     CommentContainer contenedor = new CommentContainer(); 
     Gson gson = new Gson(); 
     contenedor = gson.fromJson(json, CommentContainer.class); 
     return contenedor; 
    } 

用這種方式,我返回CommentContainer是空的。 Json字符串格式良好,您可以在JsonEditor的URL中看到。

我不想要的解決方案,只有我的方式可以得到這些屬性保存到一個對象。非常感謝。

+0

將它無需使用jsonreader解決工作的Java類? –

回答

0

您需要一個匹配您接收的JSON的對象。然後你只需把它序列化到該對象:

var serializer = new JavaScriptSerializer(); 
YourDataObject dataObject = serializer.Deserialize<YourDataObject>(JsonData); //JsonData is your json string that comes from the API call to get it 

一旦你這樣做,你就只能使用對象的屬性,像這樣:

var resources = dataObject.resources; 
相關問題