【问题标题】:I cant parse this JSON code, how could i do it?我无法解析这个 JSON 代码,我该怎么做?
【发布时间】:2015-10-10 21:02:32
【问题描述】:

我需要有关此 JSON 解析器的帮助。我有一个装有 cmets 的容器,我想得到它。这是我拥有的 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 中所见。

我不想要解决方案,只有我可以获取这些属性以将它们保存到对象中的方式。非常感谢。

【问题讨论】:

  • 在不使用 jsonreader 的情况下它是否适用于解决方案?

标签: android json jsonreader


【解决方案1】:

您需要一个与您收到的 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;

【讨论】:

    【解决方案2】:

    【讨论】:

    • 谢谢,我做到了 -> 发表于编辑 1。但是,commentContainer 中的代码为空...为什么?不是这样吗?
    • 还有另一个库可以解析 hal+json 字符串吗?有什么想法吗?
    猜你喜欢
    • 2020-05-24
    • 2011-09-04
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多