Я не могу разобрать этот код JSON, как я могу это сделать?
Мне нужна помощь с этим анализатором JSON. У меня есть один контейнер с комментариями, которые я хочу получить. Это строковый код JSON, который у меня есть: http://www.jsoneditoronline.org/?id=b73dc60acd235f60a647c02ed3e068db Мне нужно получить атрибуты из каждого комментария поля "ресурсы" (контент, идентификатор, создатель). Я пробовал это, между другими вещами, и я не могу получить то, что я хочу.
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 хорошо сформирована, как вы можете видеть в URL JsonEditor.
Я не хочу решения, только способ получить эти атрибуты для сохранения их в объекте. Большое спасибо.
2 ответа
Вам нужен объект, который соответствует 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;
Используйте библиотеку GSON https://github.com/google/gson. См. http://www.studytrails.com/java/json/java-google-json-parse-json-to-java.jsp.
http://www.jsonschema2pojo.org/ используйте это, чтобы создать класс java для строки json