我需要此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類? –