在 IOS 中解析嵌套的 Json
Posted
技术标签:
【中文标题】在 IOS 中解析嵌套的 Json【英文标题】:parsing a nested Json in IOS 【发布时间】:2014-04-08 13:19:33 【问题描述】:我刚开始使用 ios 编程,我必须解析嵌套的 Json 文件并提取项目和标签,问题是我必须在 tableview 上显示项目列表并在每次单击时刷新我的 tableview我的表格视图的一行: 我确实显示了我的项目的第一个列表,但我试图显示我的嵌套项目并将它们显示在我的“新”tableview 上: 这是我的 JSON 代码和我的 Objective-C 代码的简单代码:
"results":
"items": [
"id": "0100",
"label": "Actualités",
"cover": "http://XXXX_01.jpg",
"coverFrom": "XXX-03",
"coverTo": "2031-CCC18",
"coverOrder": 1,
"items": [
"id": "0101",
"label": "Actualité / Infos",
"cover": "http://XXXX.jpg",
"coverFrom": "2014XXX-24",
"coverTo": "2031-XXXX18",
"coverOrder": 1,
"items": [
]
,
和我的 RootViewContoller 包含函数 connectionDidFinishiongLoading** 的代码
// we will follow the format of our nested JSON
NSDictionary *allDataDictionary = [NSJSONSerialization JSONObjectWithData:dataRequest options:0 error:nil];
NSDictionary *results = [allDataDictionary objectForKey:@"results"];
NSArray *arrayOfItems = [results objectForKey:@"items"];
for (NSDictionary *diction in arrayOfItems)
//NSArray *ide = [diction objectForKey:@"id"];
NSString *label = [diction objectForKey:@"label"];
// add new object founded
[array addObject:label];
// reload my tableview
[[self tableView]reloadData];
// myParsingResults = [NSJSONSerialization JSONObjectWithData:dataRequest options:nil error:nil];
[[self tableView]reloadData];
【问题讨论】:
你到底在哪里被屏蔽了? 您能否添加更多关于您希望如何显示它们的信息? 我认为解决这个问题的关键是使用一个表格视图控制器,它能够在选择“项目”行时推送同一表格视图控制器的新实例。您最终得到的是表格视图控制器的“动态”层次结构。用 segues 定义这个是可能的。 你可以使用开源项目Mantle来解析/映射json,使用非常简单! 我想显示所有父项,然后当我点击每个项目时,我得到每个项目的子项目,当我点击每一行时我被阻止我没有得到一个新的我的 tableview 的实例,但旧的具有相同项目(而不是子项目) 【参考方案1】:如果我理解正确,请尝试类似的方法:
NSDictionary *allDataDictionary = [NSJSONSerialization JSONObjectWithData:dataRequest options:0 error:nil];
NSDictionary *results = [allDataDictionary objectForKey:@"results"];
NSArray *array = [results objectForKey:@"items"];
NSMutableArray *arrayLabels = [[NSMutableArray alloc] init];
NSDictionnary *dicoTemp = [array objectAtIndex:0];
while([dicoTemp objectForKey:@"items"])
arrayLabels addObject:[[dicoTemp objectForKey:@"items"] objectForKey:@"label"];
NSArray *arrayTemp = [dicoTemp objectForKey:@"items"];
dicoTemp = [arrayTemp objectAtIndex:0]; //I don't know how you JSON ends, you may have to check if [arrayTemp count] > 0. I presumed that at the end, there was no object for key "items"
[[self tableView] reloadData];
在我看来,这是一个奇怪的嵌套 JSON 响应。
【讨论】:
我的整个 Json 都是一样的,你将把项目嵌套到项目中等等!但我不明白的是,我将在我的表格视图中显示什么???数组 temp 或 arraylabels,因为我需要它来重复 numberOfRowsInSection (在每个部分中)和 cellDorRowAtIndexPath ! 根据您的代码,您只向array
添加了“标签”。所以我猜那是你的 tableView 的“数据源”。但是您可以在其中放置一个 NSDictionnary,并将其“用作数据源”。所以你可以先使用/显示arrayLabels
。
@user3511071 我认为这里的问题是你的 JSON 太奇怪了,你为什么要这样嵌套 Items?你应该调整那个 JSON
我不能!这是他们给我的项目!他们要我解析这个奇怪的嵌套 Json!我使用的所有解决方案都不起作用:(【参考方案2】:
试试这个……
NSError *error = nil;
NSURL *Url = [[NSURL alloc] initWithString:@"Your URL"];
jsonData = [NSData dataWithContentsOfURL:Url options:NSDataReadingUncached error:&error];
if(jsonData==Nil)
UIAlertView * alert=[[UIAlertView alloc]initWithTitle:@"Error" message:@"Please check your internet connection" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"ok", nil];
[alert show];
else
NSDictionary *dataDictionary =[[NSDictionary alloc]init];
dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
[array addObject:[[[dataDictionary objectForKey:@"results"] valueForKey:@"items"] valueForKey:@"label"]];
并重新加载您的表格视图。
【讨论】:
以上是关于在 IOS 中解析嵌套的 Json的主要内容,如果未能解决你的问题,请参考以下文章