首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JsonReader

使用JsonReader
EN

Stack Overflow用户
提问于 2015-12-04 11:37:57
回答 2查看 4.7K关注 0票数 1

我正在开发android应用程序,它应该读取这个json字符串:

代码语言:javascript
复制
{
"coord":{
       "lon":145.77,
       "lat":-16.92
},
"weather":[
          {
        "id":803,
        "main":"Clouds",
        "description":"broken clouds",
        "icon":"04n"
        }
        ],
  "base":"cmc stations"
}

类似的东西。

我可以使用以下方法成功地读取"coord"值:

代码语言:javascript
复制
public Coordinates readCoordinates(JsonReader reader) throws IOException{
    double longitude = 0.0;     // lon
    double latitude  = 0.0;     // lat

    reader.beginObject();

    while (reader.hasNext()){
        String nameToRead = reader.nextName();
        if(nameToRead.equals("lon")){
            longitude = reader.nextDouble();
        }else if (nameToRead.equals("lat")){
            latitude = reader.nextDouble();
        }else {
            reader.skipValue();
        }
    }
    reader.endObject();
    return (new Coordinates(longitude, latitude));
}

我有一种类似的阅读"weather"的方法

代码语言:javascript
复制
public Weather readWeather(JsonReader reader) throws IOException{
    int id = 0;
    String main         = "";
    String description  = "";
    String icon         = "";

    reader.beginObject();
    while (reader.hasNext()){
        String nameToRead = reader.nextName();
        if(nameToRead.equals("id")){
            id = reader.nextInt();
        }else if (nameToRead.equals("main")){
            main = reader.nextString();
        }else if (nameToRead.equals("description")){
            description = reader.nextString();
        }else if (nameToRead.equals("icon")){
            icon = reader.nextString();
        }else{
            reader.skipValue();
        }
    }
    reader.endObject();
    return (new Weather(id, main, description, icon));
}

我一直收到这条异常消息Expected BEGIN_OBJECT but was BEGIN_ARRAY

如果我将reader.beginObject()更改为reader.beginArray(),则会得到相同的错误。我也试着完全删除它,也发生了同样的错误。

我假设这是由于引入了[,但我不太确定如何解决这个问题。如果有人有线索,请帮忙,我会很感激的,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-04 11:50:49

您没有得到JSON的结构。在“天气”之后,只有一个对象的数组。所以你的代码应该是

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

                while( jsonReader.hasNext() ) {

                    jsonReader.beginObject();

                    while( jsonReader.hasNext() ) {

                       String nameToRead = reader.nextName();
    if(nameToRead.equals("id")){
        id = reader.nextInt();
    }else if (nameToRead.equals("main")){
        main = reader.nextString();
    }else if (nameToRead.equals("description")){
        description = reader.nextString();
    }else if (nameToRead.equals("icon")){
        icon = reader.nextString();
                        else {

                            jsonReader.skipValue();

                        }
票数 2
EN

Stack Overflow用户

发布于 2015-12-04 11:42:58

在您的gson模型类中,只需查看一下。如json所说

代码语言:javascript
复制
"weather":[
          {
        "id":803,
        "main":"Clouds",
        "description":"broken clouds",
        "icon":"04n"
        }
        ]

它应该解析为jsonArray,但我认为在您的模型类中,您希望它是jsonObject

使用http://www.jsonschema2pojo.org/按照json获得精确的java模型类。

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

https://stackoverflow.com/questions/34087527

复制
相关文章

相似问题

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