小编典典

将JSON数组解析为NSDictionary

json

我正在使用Weather Underground API制作应用程序,但在解析与严重警报有关的代码块时遇到了麻烦。JSON使用具有子键值对的键值对-
这对我来说不是问题,因为我可以从中选出后续的NSDictionary-但严重警报的条目被证明是有问题的。见下文:

"alerts": [
    {
    "type": "WAT",
    "description": "Flash Flood Watch",
    "date": "3:13 PM EDT on April 28, 2012",
    "date_epoch": "1335640380",
    "expires": "8:00 AM EDT on April 29, 2012",
    "expires_epoch": "1335700800",
    "message": "\u000A...Flash Flood Watch in effect through Sunday morning...\u000A\u000AThe National Weather Service in Charleston has issued a\u000A\u000A* Flash Flood Watch for portions of northeast Kentucky... (Note: I trimmed this for length's sake),
    "phenomena": "FF",
    "significance": "A"
    }
]

“警报”对与我已经解析的其他对有所不同,因为它在子值周围有这个 []括号
,而且我不确定如何清除它,以便可以访问子值。在我能够解析的其他示例中,它只有 {}括号 ,而没有{}和[]括号。作为参考,括号始终存在-
即使没有严重的天气警报…在这种情况下,“警报”对返回的括号[]也没有子对。

有没有办法我可以从NSDictionary中删除[]括号,或者以其他方式忽略它们?任何意见,将不胜感激!


为了提供参考和故障排除帮助,以下是我如何成功解析其余JSON文档的方法:

1)从原始JSON创建NSDictionary

//Process Weather Call
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

2)为嵌套的JSON对创建后续字典

NSDictionary *current_observation = [json objectForKey:@"current_observation"];

3)赋值

NSString* weather;
weather = [current_observation objectForKey:@"weather"];

因此,最终结果将是一个字符串,上面写着“部分多云”或类似的内容,以及许多我未显示的相关天气值。它们成功解析,因为它们仅具有范围括号{},而没有[]括号。


阅读 260

收藏
2020-07-27

共1个答案

小编典典

方括号表示数组中存在Json数据。您可以将其解析如下

NSArray *alertArray = [json objectForKey:@"alerts"];

现在您应该遍历所有警报并对其进行解析(在您的情况下,它仅为1,但在另一个json字符串中可能更多):

//parse each alert
for (NSDictionary *alert in alertArray ){
     NSString* description = [alert  objectForKey:@"description"];
    //etc...
}
2020-07-27