首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取内部数据JsonReader android

获取内部数据JsonReader android
EN

Stack Overflow用户
提问于 2016-02-17 16:45:50
回答 1查看 431关注 0票数 1

所以我一直在四处张望,我不知道如何处理这个问题。我正在解析像这样的JSON

代码语言:javascript
复制
{
    "foo1" : { /* data I want */ },
    "foo2" : { /* data I want */ },
    "foo3" : { /* data I want */ },
    ...
}

因为我试图通过一个大文件,所以我使用了一个流。我现在拥有的是

代码语言:javascript
复制
gson = new GsonBuilder().create();

JsonReader jReader = new JsonReader(new InputStreamReader(getResources()
                                            .openRawResource(R.raw.all_sets_x), "UTF-8"));

while (jReader.hasNext() && jReader.peek() != JsonToken.END_DOCUMENT) {
    Set set = gson.fromJson(jReader, Set.class);
    sets.add(set);
}

我的问题是我想跳过foo,只读取我想要的{ /*数据*/ }。我不知道我会得到什么不同的傻瓜。当我试图跳过它时,它跳过了外部大括号,但是当我beginObject时,它在大括号内的字符串上出现了错误,并带有我想要的数据。我相信我可能错过了一些简单的东西,但对于我的生活,我不确定。我试着使用beginObject创建一个json对象并使用gson解析该对象,但我在那里也不太成功。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 21:46:40

好吧,所以我想出来了。我给出了名称的空格,当它是对象中的一个字段时,它是错误的--在本例中,它也是对象标题(foo1)的JSON。我发现我可以进入第一个对象

代码语言:javascript
复制
jsonReader.beginObject();

jsonReader.nextName();

while (jsonReader.hasNext() && jsonReader.peek() != JsonToken.END_DOCUMENT) {
    Set set = gson.fromJson(jsonReader, Set.class);
    sets.add(set);
    jsonToken = jsonReader.peek();
    if (jsonToken == JsonToken.NAME) {
        jsonReader.nextName();
    } else if (jsonToken != JsonToken.END_DOCUMENT) {
        jsonReader.endObject();
        jsonReader.skipValue();
        jsonToken = jsonReader.peek();
        if (jsonToken != JsonToken.END_DOCUMENT) {
            jsonReader.nextName();
        }
    }
}

这允许我获得我想要的{ /*数据(在第一个foo之后),以及它之后的所有foos,我必须检查它是否是一个名称,因为我相信json对象中有一个额外的end对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35462714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档