-1

我正在使用JSONiOS 中的解析器。

但我想知道如何真正解析(有点)更复杂的东西,我的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"];

提前致谢...

4

8 回答 8

3

首先你的 json 是无效的。如果你把'{'放在开头,'}'放在最后,那么它是有效的。其次,您应该使用在线json解析网站来查看您的json字符串是否有效。试试http://jsonviewer.stack.hu/

对于 json 解析,使用 NSJSON Kit 的 NSJSONSerialization。去这篇文章了解如何使用它。 如何使用 NSJSONSerialization

{} 括号中的对象表示它是一个 NSDictionary 对象,而 [] 中的对象表示它们是 NSArray 对象的一部分。

于 2013-04-29T09:46:12.750 回答
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"];
于 2013-04-29T09:49:29.457 回答
1

试着转动

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"];
于 2013-04-29T09:44:44.597 回答
1

试试这样可能对你有帮助

  NSArray *array=[[[jsonarray objectAtIndex:0] valueForKey:@"results"] valueForKey:@"Events"];
    NSString *name=[[array objectAtIndex:indexPath.row] valueForKey:@"Event_Name"];
于 2013-04-29T09:43:03.220 回答
1

最佳实践是在链接中查看 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"];
于 2013-04-29T11:03:12.487 回答
0

以上不是有效的 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

于 2013-04-29T09:46:36.650 回答
0

您可以存储根对象并根据需要获取数据。逐层访问数据。如果您想显示事件,您可以为事件创建一个数组,这样您就可以避免一次又一次地执行这些步骤。

@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"];
于 2013-04-29T12:01:37.213 回答
-1

首先包括 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)..

然后通过这种方式你最终可以得到事件名称的值

于 2013-04-29T09:40:36.657 回答