Есть проблема с JSON - PullRequest
       4

Есть проблема с JSON

0 голосов
/ 31 августа 2011

У меня проблема с анализом json
-Я установил соединение с удаленным сервером для получения объекта json, который выглядит следующим образом

2011-08-31 13:23:27.280 WallpaperBackground[731:40b] jsonString:{"photoset":{"id":"72157627554107638", "primary":"6095921496", "owner":"66801517@N05",  "ownername":"Gariya1", "photo":[{"id":"6096223569", "secret":"47081ffe65", "server":"6202", "farm":7, "title":"snakc", "isprimary":"0"}, {"id":"6095921496", "secret":"ea3b2b5076", "server":"6064", "farm":7, "title":"images", "isprimary":"1"},

- В методе didReceiveData я назначил строку json

Код:

NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

тогда я построил свой словарь

код:

NSDictionary *results = [jsonString JSONValue];

когда я запускаю это, в консоли я получаю эти ошибки

 2011-08-31 13:23:27.284 WallpaperBackground[731:40b] -JSONValue failed. Error trace is: (
"Error Domain=org.brautaset.JSON.ErrorDomain Code=5 \"Unescaped control character '0x0'\" UserInfo=0x4e1d670 {NSLocalizedDescription=Unescaped control character '0x0'}",
"Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Object value expected for key: server\" UserInfo=0x4e1d7c0 {NSUnderlyingError=0x4e1d6d0 \"Unescaped control character '0x0'\", NSLocalizedDescription=Object value expected for key: server}",
"Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Expected value while parsing array\" UserInfo=0x4e1d810 {NSUnderlyingError=0x4e1d7a0 \"Object value expected for key: server\", NSLocalizedDescription=Expected value while parsing array}",
"Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Object value expected for key: photo\" UserInfo=0x4e1d8d0 {NSUnderlyingError=0x4e1d890 \"Expected value while parsing array\", NSLocalizedDescription=Object value expected for key: photo}",
"Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Object value expected for key: photoset\" UserInfo=0x4e1d980 {NSUnderlyingError=0x4e1d8b0 \"Object value expected for key: photo\", NSLocalizedDescription=Object value expected for key: photoset}"

Если кто-нибудь знает, позвольте мне помочь, пл ... спасибо

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Создайте NSMutableData, предпочтительно общедоступный, в определении вашего интерфейса, найденном в вашем файле .h. Каждый раз, когда вызывается connection:didReceiveData:, используйте метод NSMutableData's "appendData:data" для добавления вновь полученных данных в переменную.

Когда вызывается ваш метод connection:didFinishLoading:, у вас будет полностью заполненный объект NSMutableData, ожидающий анализа. Затем вызовите метод SBJSONParser's, чтобы проанализировать его, как вы.

EDIT

Вы объявляете объект NSMutableData в своем .h файле.

Всякий раз, когда ваш объект соединения вызывает его метод делегата DidReceiveData, вы добавляете данные следующим образом:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [publicDataObject appendData:data];
}

Когда данные будут полностью загружены, вам останется объект с вашими полными данными в нем. Итак, в вашем методе FinishLoading:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *jsonString = [[NSString alloc] initWithData:publicDataObject encoding:NSUTF8StringEncoding];

    id results = [jsonString JSONValue];
}

Если вы точно знаете, каким будет результирующий тип данных, вы можете изменить тип данных переменной результатов с id на i-е. NSDictionary или NSArray.

Надеюсь, это поможет.

0 голосов
/ 31 августа 2011

Метод connection:didReceiveData: будет вызываться несколько раз при загрузке частей данных. Вы не можете предполагать, что данные полны, пока не будет вызван connection:didFinishLoading:. До тех пор вы должны объединять фрагменты данных в буфере (например, NSMutableData).

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