Нужна помощь в разборе комплекса JSON - PullRequest
1 голос
/ 23 марта 2011

Я пытаюсь проанализировать сложный 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]);
    }   

}

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Вы можете использовать TouchJSON, это действительно просто и имеет хорошие характеристики.Он принимает ваш json в качестве данных и может вернуть вам NSArray или NSDictionnary в одну строку.

Если ваш JSON имеет структуру списка:

NSArray *array = [[CJSONDeserializer deserializer] deserializeAsArray:yourData error:nil];

Остальное:

NSDictionary *dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:yourData error:nil;

Вы просто должны включить TouchJSON в свой проект и импортировать #import "CJSONDeserializer.h" в те классы, которые хотите использовать.https://github.com/TouchCode/TouchJSON

0 голосов
/ 17 января 2012

Похоже, вашей проблемой может быть список в структуре данных JSON.Когда я использовал инфраструктуру JSON, я не мог получить доступ к значениям массива с помощью ключевых путей.

Я решил проблему на стороне сервера, не допуская массивы в структуре данных - только пары ключ / значение.Затем я мог получить доступ к каждому значению в структуре с помощью ключевого пути из корневого узла.(Я просто использовал числа от 0 для ключей, когда хотел преобразовать список в JSON.)

И вы уверены, что синтаксис структуры данных правильный?Может быть, ваш фреймворк не может справиться с этим - хотя это должно быть в состоянии.Я использовал это: https://github.com/stig/json-framework/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...