我试图用JsonReader解析JSON文件。我使用skipvalue()函数转到下一个键,但是解析器跳到文件末尾,而不是转到下一个键。

该文件如下所示:

{
   "data":{
      "current_condition":[
         {
            "cloudcover":"100",
            "humidity":"74",
            "observation_time":"01:28 PM",
            "precipMM":"0.4",
            "pressure":"1005",
            "temp_C":"-3",
            "temp_F":"27",
            "visibility":"6",
            "weatherCode":"326",
            "weatherDesc":[
               {
                  "value":"Light snow"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0011_light_snow_showers.png"
               }
            ],
            "winddir16Point":"NE",
            "winddirDegree":"50",
            "windspeedKmph":"15",
            "windspeedMiles":"9"
         }
      ],
      "request":[
         {
            "query":"Minsk, Belarus",
            "type":"City"
         }
      ],
      "weather":[
         {
            "date":"2013-03-20",
            "precipMM":"4.4",
            "tempMaxC":"-4",
            "tempMaxF":"25",
            "tempMinC":"-13",
            "tempMinF":"10",
            "weatherCode":"326",
            "weatherDesc":[
               {
                  "value":"Light snow"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0011_light_snow_showers.png"
               }
            ],
            "winddir16Point":"NE",
            "winddirDegree":"40",
            "winddirection":"NE",
            "windspeedKmph":"17",
            "windspeedMiles":"11"
         },
         {
            "date":"2013-03-21",
            "precipMM":"0.6",
            "tempMaxC":"-5",
            "tempMaxF":"23",
            "tempMinC":"-15",
            "tempMinF":"5",
            "weatherCode":"326",
            "weatherDesc":[
               {
                  "value":"Light snow"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0011_light_snow_showers.png"
               }
            ],
            "winddir16Point":"NE",
            "winddirDegree":"38",
            "winddirection":"NE",
            "windspeedKmph":"12",
            "windspeedMiles":"7"
         },
         {
            "date":"2013-03-22",
            "precipMM":"0.1",
            "tempMaxC":"-9",
            "tempMaxF":"17",
            "tempMinC":"-19",
            "tempMinF":"-2",
            "weatherCode":"119",
            "weatherDesc":[
               {
                  "value":"Cloudy"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0003_white_cloud.png"
               }
            ],
            "winddir16Point":"NE",
            "winddirDegree":"51",
            "winddirection":"NE",
            "windspeedKmph":"19",
            "windspeedMiles":"12"
         },
         {
            "date":"2013-03-23",
            "precipMM":"0.0",
            "tempMaxC":"-8",
            "tempMaxF":"18",
            "tempMinC":"-13",
            "tempMinF":"8",
            "weatherCode":"116",
            "weatherDesc":[
               {
                  "value":"Partly Cloudy"
               }
            ],
            "weatherIconUrl":[
               {
                  "value":"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png"
               }
            ],
            "winddir16Point":"NNE",
            "winddirDegree":"12",
            "winddirection":"NNE",
            "windspeedKmph":"16",
            "windspeedMiles":"10"
         }
      ]
   }
}


这是我的代码:

String json_url = "http://free.worldweatheronline.com/feed/weather.ashx?q="+city+"&format=json&num_of_days="+Integer.toString(days)+"&key=0592d3cc1b151105131103";
JsonReader forecastJsonReader = new JsonReader(new InputStreamReader(getUrlData(json_url)));
forecastJsonReader.beginArray();
while (forecastJsonReader.hasNext()) {
    String name = forecastJsonReader.nextName();
    if (name.equals("date")) {
        Log.d("WEATHER",forecastJsonReader.nextString());
    } else if(name.equals("tempMaxC")) {
        Log.d("WEATHER",forecastJsonReader.nextString());
    } else {
        forecastJsonReader.skipValue();
    }

}
forecastJsonReader.endObject();
forecastJsonReader.close();

最佳答案

我认为这不是使用jsonreader解析json的正确方法,首先您的json以对象而不是数组开头
这是一个如何解析json的示例

主功能

reader.beginObject();

        while (reader.hasNext()) {

            String name = reader.nextName();

            if (name.equals("data")) {
                readData(reader);
            } else {
                reader.skipValue(); // avoid some unhandle events
            }
        }

reader.endObject();
reader.close();


读取数据功能

private void readData(JsonReader reader) throws IOException {
    reader.beginObject();
    while(reader.hasNext()) {
    String name = reader.nextName();
    if(name.equals("weather")) {
    reader.beginArray();
    while (reader.hasNext()) {
            reader.beginObject();
        String objectWeatherName = reader.nextName();
        if (objectWeatherName .equals("date")) {
             Log.d("WEATHER",reader.nextString());
        } else if (objectWeatherName .equals("tempMaxC")) {
             Log.d("WEATHER",reader.nextString());
        } else {
             reader.skipValue();
        }
            reader.endObject();
    }
    reader.endArray();
    } else {
        reader.skipValue();
    }

    }
    reader.endObject();
}


那就是如果您想读取位于数据对象中的天气对象中的日期和tempMaxC,希望您理解我的回答,但是如果您有任何疑问,请随时在评论中提问:)

关于android - 如何使用JsonReader跳过不需要的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15529433/

10-10 23:08