2015-07-21 104 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; 
相关问题