我需要此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中看到。
我不想要的解决方案,只有我的方式可以得到这些属性保存到一个对象。非常感谢。
将它无需使用jsonreader解决工作的Java类? –