iOS中的json解析[关闭]
Posted
技术标签:
【中文标题】iOS中的json解析[关闭]【英文标题】:json parsing in iOS [closed] 【发布时间】:2013-04-29 09:35:39 【问题描述】:我正在使用 ios 中的 JSON
解析器。
但我想知道如何真正解析(有点)更复杂的东西,我的JSON
显示这样的数据:
"terms":"3",
"results":
"Events":[
"Event_Name":"3 Doors Down",
"Event_NavigateURL":"3-doors-down"
,
"Event_Name":"Alabama 3",
"Event_NavigateURL":"alabama-3"
,
"Event_Name":"Belsonic 2013",
"Event_NavigateURL":"belsonic-2013"
,
"Event_Name":"Download Festival 2013",
"Event_NavigateURL":"download-festival-2013"
],
"Sports":
,
"Venues":
我想获取Event_Name
的值,并想将它存储在Tableview中,我应该如何获取这个?
我试过这个,但没有成功我得到SIGABRT ... (NSInvalidArgumentException)
,
cell.textLabel.text = [[[[arr objectAtIndex:indexPath.row] objectAtIndex:@"results"] objectForKey:@"Events"] objectForKey:@"Event_Name"];
提前致谢...
【问题讨论】:
首先,你的JSON无效 【参考方案1】:首先你的 json 是无效的。如果你把''放在开头,''放在最后,那么它是有效的。 其次,您应该使用在线json解析网站来查看您的json字符串是否有效。试试http://jsonviewer.stack.hu/
对于 json 解析,使用 NSJSON Kit 的 NSJSONSerialization。 去这篇文章了解如何使用它。 How to use NSJSONSerialization
括号中的对象表示它是一个 NSDictionary 对象,[] 中的对象表示它们是 NSArray 对象的一部分。
【讨论】:
始终在 json 字符串中查找数组对象和字典对象。如果您以不同的方式访问它们,您的应用肯定会崩溃.. 那个 JSON 怎么无效? jsons 字符串以 [ ] 括号或 括号开头,分别表示它是 NSArray 类型的 json 或 NSDictionary 类型的对象。在您的情况下,您的字符串具有键值对,这意味着它是一个 NSDictionary 对象。因此,为此,有效的 json 必须在字符串的开头包含 并在字符串结尾包含 ,以显示字典对象的开头和结尾 你是对的。由于 JSON 已被编辑,因此该讨论毫无意义。很抱歉给您带来麻烦。【参考方案2】:要在 TableView 中显示事件名称,您的数组应该存储事件对象,从数组中的 JSON 获取事件 -
arr = [[JSONObject objectForKey:@“results”] objectForKey:@“Events”];
// and set cell text label as -
cell.textLabel.text =[[arr objectAtIndex:indexPath.row] objectForKey:@"Event_Name"];
【讨论】:
【参考方案3】:试试这样可能对你有帮助,
NSArray *array=[[[jsonarray objectAtIndex:0] valueForKey:@"results"] valueForKey:@"Events"];
NSString *name=[[array objectAtIndex:indexPath.row] valueForKey:@"Event_Name"];
【讨论】:
【参考方案4】:试着转
cell.textLabel.text = [[[[arr objectAtIndex:indexPath.row] objectAtIndex:@"results"] objectForKey:@"Events"] objectForKey:@"Event_Name"];
进入
cell.textLabel.text = [[[[yourJsonDict objectForKey:@"results"] objectForKey:@"Events"] objectAtIndex:indexpath.row] objectForKey:@"Event_Name"];
【讨论】:
[arr objectForKey:@"results"]
显示错误
哦,是的,它是一个数组...替换 arr
为您的 Json 字典的名称
感谢回答但同样的错误..
编译错误?试着一步一步做。例如。继续做一个像NSLog(@"%@", [yourJsonDict objectForKey:@"results"])
这样的NSLog,然后看看你得到了什么。然后做一个NSLog(@"%@", [[yourJsonDict objectForKey:@"results"] objectAtIndex:0]);
等等。【参考方案5】:
最佳实践是在链接中查看 JSON 的结构:http://json.bloople.net/。
粘贴您的 JSON 响应,您将找到正确的结构。
您的 JSON 结构类似于:字典数组。 所以使用下面的代码将数据存储在数组中。
id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
arr = [[jsonObject objectForKey:@“results”] objectForKey:@“Events”];
使用以下代码显示Tableview
中的数据。
cell.textLabel.text =[[arr objectAtIndex:indexPath.row] objectForKey:@"Event_Name"];
【讨论】:
【参考方案6】:以上不是有效的 JSON(如果以上是总响应)。使用 jsonLint.com 进行验证。
你可以试试这个:
arr = [NSMutableArray arrayWithCapacity:[[dic objectForKey:@"Events"] count]];
for (NSDictionary *details in [dic objectForKey:@"Events"])
[arr addObject:[details objectForKey:@"Event_Name"]];
然后将arr
作为UITableview
的输入
【讨论】:
【参考方案7】:您可以存储根对象并根据需要获取数据。逐层访问数据。如果要显示事件,可以为事件创建一个数组,这样就可以避免一次又一次地执行这些步骤。
@property (nonatomic, strong) NSDictionary *json;
@property (nonatomic, strong) NSArray *events;
NSError *error = nil;
self.json = [NSJSONSerialization JSONObjectWithData:responseData
options:NSJSONReadingAllowFragments
error:&error];
NSDictionary *results = self.json[@"results"];
self.events = results[@"Events"];
//Access each event in events array and get the event name
NSDictionary *event = self.events[0];
NSString *eventName = event[@"Event_Name"];
【讨论】:
【参考方案8】:首先包含 json 框架 ..http://longweekendmobile.com/2010/10/15/how-to-consume-json-or-xml-web-apis-on-iphone-smoothly/ 然后跟随:
NSError *error;
SBJSON *json = [SBJSON new];
NSDictionary *dict_item = [json objectWithString:resp_str error:&error];
if (dict_item == nil)
NSLog(@"%@", [NSString stringWithFormat:@"JSON parsing failed: %@", [error localizedDescription]]);
else
NSLog(@"items selected is : %@", dict_item);
你需要检查天气它返回一个数组或一个字典..(实际返回类型是 id)..
然后通过这种方式最终可以得到事件名称的值
【讨论】:
别费心使用 SBJSON,它比原生 api 慢。 我能够解析我的 json 数据,这是我的日志输出: "terms":"3", "results": "Events":[ "Event_Name":"3 Doors Down", "Event_NavigateURL":"3-doors-down" , "Event_Name":"Alabama 3", "Event_NavigateURL":"alabama-3" , "Event_Name":"Belsonic 2013", "Event_NavigateURL":"belsonic-2013" , "Event_Name":"Download Festival 2013", "Event_NavigateURL":"download-festival-2013" ], "Sports": , "Venues":[]
是的,这些天我们确实有自己的内置类,用于在 ios 中解析 json .. 但我建议的是最简单的方法 ..以上是关于iOS中的json解析[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 托管 JSON 文件以使用 URL 解析它 [关闭]