我试图用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/