【问题标题】:Using NSJSONSerialization to parse JSON使用 NSJSONSerialization 解析 JSON
【发布时间】:2012-08-28 15:06:27
【问题描述】:

对此进行了太多讨论,但我无法弄清楚如何解决我的问题。

这是我从 WorldWeatherOnline 获得的 JSON 数据。 JSON 是有效的。但我不知道如何解析它。这是我的代码,后跟 JSON。请帮忙!

NSError* errorInfo;
NSDictionary *parsedJSON = [NSJSONSerialization JSONObjectWithData:self.wwoWeatherData options:kNilOptions error:&errorInfo];

NSArray* temp = [parsedJSON objectForKey:@"temp_C"];
NSLog(@"%@", temp);
{ “数据”:{ “现在的状况”:[ { “云罩”:“0”, “湿度”:“82”, "observation_time":"11:07 PM", "precipMM":"0.0", “压力”:“1024”, "temp_C":"16", "temp_F":"61", “能见度”:“10”, "天气代码":"113", “天气描述”:[ { “值”:“清除” } ], “天气图标网址”:[ { “价值”:“http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0008_clear_sky_night.png” } ], "winddir16Point":"NNE", "winddirDegree":"30", "windspeedKmph":"11", “风速里程”:“7” } ], “要求”:[ { "query":"Lat 48.85 和 Lon 2.35", “类型”:“纬度” } ], “天气”:[ { "日期":"2012-09-04", "precipMM":"0.0", "tempMaxC":"25", "tempMaxF":"77", "tempMinC":"14", "tempMinF":"57", "天气代码":"113", “天气描述”:[ { “价值”:“晴天” } ], “天气图标网址”:[ { “价值”:“http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png” } ], "winddir16Point":"N", "winddirDegree":"5", “风向”:“N”, "windspeedKmph":"13", “风速里程”:“8” }, { "日期":"2012-09-05", "precipMM":"0.0", "tempMaxC":"22", "tempMaxF":"72", "tempMinC":"10", "tempMinF":"50", "天气代码":"113", “天气描述”:[ { “价值”:“晴天” } ], “天气图标网址”:[ { “价值”:“http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png” } ], "winddir16Point":"NNE", "winddirDegree":"25", "风向":"NNE", "windspeedKmph":"20", “风速英里”:“13” }, { "日期":"2012-09-06", "precipMM":"0.0", "tempMaxC":"22", "tempMaxF":"71", "tempMinC":"11", "tempMinF":"51", "天气代码":"113", “天气描述”:[ { “价值”:“晴天” } ], “天气图标网址”:[ { “价值”:“http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png” } ], "winddir16Point":"NE", "winddirDegree":"42", "风向":"NE", "windspeedKmph":"15", “风速里程”:“10” }, { "日期":"2012-09-07", "precipMM":"0.0", "tempMaxC":"24", "tempMaxF":"75", "tempMinC":"13", "tempMinF":"55", "天气代码":"116", “天气描述”:[ { “值”:“部分多云” } ], “天气图标网址”:[ { “价值”:“http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png” } ], "winddir16Point":"ENE", "winddirDegree":"56", "风向":"ENE", "windspeedKmph":"13", “风速里程”:“8” }, { "日期":"2012-09-08", "precipMM":"0.0", "tempMaxC":"26", "tempMaxF":"78", "tempMinC":"16", "tempMinF":"61", "天气代码":"113", “天气描述”:[ { “价值”:“晴天” } ], “天气图标网址”:[ { “价值”:“http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png” } ], "winddir16Point":"ENE", "winddirDegree":"76", "风向":"ENE", "windspeedKmph":"9", “风速里程”:“6” } ] } }

【问题讨论】:

    标签: iphone ios json


    【解决方案1】:

    您解析的 json 包含一个名为 data 的字典。在该字典中有一个current_condition 数组。继续深入研究数据结构以找到您正在寻找的属性:

    NSDictionary *data = [parsedJSON objectForKey:@"data"];
    NSArray *currentConditions = [data objectForKey:@"current_condition"];
    NSDictionary *condition = [currentConditions objectAtIndex:0];
    NSString *tempC = [condition objectForKey:@"temp_C"];
    

    【讨论】:

    • 应该这样:NSLog(@"%@", currentConditions);然后显示 current_condition 中的值?如果是,那么它不起作用。它显示为空。
    • 抱歉,出现复制/粘贴错误。第二行应该从数据中提取 current_condition,而不是 parsedJson
    • 这是有道理的。但是,如果您看到我的查询,我正在尝试获取 temp_c。当我打印 currentconditions 时,它会给出 current_condition 中的所有值。我需要为 currentconditions 数组做一个 ObjectAtIndex 吗?如果是这样,我真的需要对索引进行硬编码吗?我是 JSON 和 iOS 编码的新手,所以请多多包涵。
    • 我扩展了示例以提供更多帮助。您可能不需要对索引进行硬编码,但我不知道为什么它会在这里返回一个数组。如果它在同一个查询中支持多个位置,但您总是只查询一个位置,那么总是拉第一项应该是安全的。
    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多