我需要有关此JSON解析器的帮助。我有一个容器带有我想要的评论。这是我拥有的JSON字符串代码:http://www.jsoneditoronline.org/?id=b73dc60acd235f60a647c02ed3e068db 我需要从“资源”字段(内容,id,创建者)的每个评论中获取属性。我试过这个,在另一件事之间,我无法获得我想要的东西。
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 :(得分: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;
答案 1 :(得分:0)