Я пытаюсь проанализировать сложный json (используя инфраструктуру Json), проблема в том, что у json много вложенных объектов. Заняло слишком много времени на программирование, и я не могу найти решение, мой код пахнет, и у меня много сбоев.
Любая идея? (У меня нет проблем при использовании другого json-фреймворка, такого как jsonkit или другой)
Вот упрощенная версия json.
[
{
"category": {
"id": 451,
"description": "Product description",
"quantity": "3149",
"category": [
{
"category": {
"id": 115,
"description": "Product description",
"quantity": "465",
"category": [
{
"category": {
"id": 125,
"description": "Product description",
"quantity": "6"
}
},
{
"category": {
"id": 120,
"description": "Product description",
"quantity": "57",
"category": [
{
"category": {
"id": 193,
"description": "Product description",
"quantity": "27"
}
},
{
"category": {
"id": 194,
"description": "Product description",
"quantity": "14"
}
}
]
}
},
{
"category": {
"id": 446,
"description": "Product description",
"quantity": "7"
}
},
{
"category": {
"id": 132,
"description": "Product description",
"quantity": "28",
"category": [
{
"category": {
"id": 224,
"description": "Product description",
"quantity": "3"
}
},
{
"category": {
"id": 137,
"description": "Product description",
"quantity": "4"
}
}
]
}
},
{
"category": {
"id": 128,
"description": "Product description",
"quantity": "21"
}
}
]
}
},
{
"category": {
"id": 21,
"description": "Product description",
"quantity": "225",
"category": [
{
"category": {
"id": 170,
"description": "Product description",
"quantity": "1"
}
},
{
"category": {
"id": 68,
"description": "Product description",
"quantity": "45",
"category": [
{
"category": {
"id": 81,
"description": "Product description",
"quantity": "2"
}
},
{
"category": {
"id": 69,
"description": "Product description",
"quantity": "2"
}
}
]
}
}
]
}
}
]
}
},
{
"category": {
"id": 390,
"description": "Product description",
"quantity": "251",
"category": [
{
"category": {
"id": 714,
"description": "Product description",
"quantity": "0"
}
},
{
"category": {
"id": 622,
"description": "Product description",
"quantity": "22",
"category": [
{
"category": {
"id": 192,
"description": "Product description",
"quantity": "16"
}
},
{
"category": {
"id": 391,
"description": "Product description",
"quantity": "6"
}
}
]
}
},
{
"category": {
"id": 612,
"description": "Product description",
"quantity": "5"
}
},
{
"category": {
"id": 621,
"description": "Product description",
"quantity": "123",
"category": [
{
"category": {
"id": 628,
"description": "Product description",
"quantity": "25"
}
},
{
"category": {
"id": 457,
"description": "Product description",
"quantity": "3"
}
}
]
}
},
{
"category": {
"id": 720,
"description": "Product description",
"quantity": "1"
}
},
{
"category": {
"id": 188,
"description": "Product description",
"quantity": "52",
"category": [
{
"category": {
"id": 437,
"description": "Product description",
"quantity": "10"
}
},
{
"category": {
"id": 639,
"description": "Product description",
"quantity": "7"
}
},
{
"category": {
"id": 152,
"description": "Product description",
"quantity": "4",
"category": [
{
"category": {
"id": 34,
"description": "Product description",
"quantity": "3"
}
},
{
"category": {
"id": 31,
"description": "Product description",
"quantity": "1"
}
}
]
}
}
]
}
},
{
"category": {
"id": 548,
"description": "Product description",
"quantity": "3"
}
}
]
}
}]
Мое намерение - создать массив объектов для заполнения базы данных, таблица выглядит так:
idfather (папа категория)
idproduct
описание
количество
отметка времени
Последнее, что я попробовал:
- (void)moreCategories:(NSString *)myString {
NSLog(@"%@",myString);
NSDictionary *mydict =[myString valueForKeyPath:@"category"] ;
NSMutableArray *myArray = [[NSMutableArray alloc] init];
myArray = [mydict valueForKey:@"category"] ;
NSLog(@"count %d",[myArray count]);
for (int i = 0; i < [myArray count]; i++)
{
NSDictionary *dict = [myArray objectAtIndex:i];
//sometime crashes here
if (dict ){
//NSLog(@"dict: %d",[dict count]);
//NSLog(@"id %d",[[dict objectForKey:@"id"] intValue]);
//NSLog(@"description %@",[dict objectForKey:@"description"] );
//NSLog(@"quantity %d",[[dict objectForKey:@"quantity"] intValue]);
if ([dict valueForKeyPath:@"category"]) {
[self moreCategories:[dict valueForKeyPath:@"category"] ];
}
}
}
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[[NSString alloc] initWithData:responseData encoding:NSISOLatin1StringEncoding]autorelease];
[responseData release];
NSDictionary *results = [responseString JSONValue];
self.allData = [results valueForKey:@"category"] ;
NSLog(@"count %d",[self.allData count]);
for (int i = 0; i < [self.allData count]; i++)
{
NSDictionary *dict = [self.allData objectAtIndex:i];
//NSLog(@"id %d",[[dict objectForKey:@"id"] intValue]);
NSLog(@"description %@",[dict objectForKey:@"description"] );
//NSLog(@"quantity %d",[[dict objectForKey:@"quantity"] intValue]);
if ([dict objectForKey:@"category"]) {
//NSLog(@"%@",[dict valueForKeyPath:@"category"]);
//NSLog(@"%@",[self.allData objectAtIndex:i]);
[self moreCategories:[dict objectForKey:@"category"] ];
//NSLog(@"%@",[self.allData objectAtIndex:i]);
}
// NSLog(@"%@",[self.allData objectAtIndex:i]);
}
}