2011-12-20 3 views
0

Я делаю запрос на сервер для некоторых результатов, которые должны быть возвращены в формате JSON.JSON parsing Ошибка получения brautaset.JSON error

Когда я распечатываю запрошенную строку, она показывает правильный правый выход. Однако, когда я пытаюсь разобрать строку результата я получаю ошибку:

Error Domain=org.brautaset.JSON.ErrorDomain Code=3 "Object value expected for key: result" UserInfo=0x6c4cbe0 {NSUnderlyingError=0x6c4caf0 "Object value expected for key: map", NSLocalizedDescription=Object value expected for key: result} 

Это мой код JSON:

SBJSON *jsonParser = [[SBJSON alloc] init]; 

[jsonParser setHumanReadable:YES]; 
NSError *theError; 

NSString *loginPayload = @"{\"service\": \"getMyJobs\", \"params\": {\"map\": {\"day\": {\"javaClass\": \"java.sql.Timestamp\", \"time\": 1316757600000}}}, \"security\": {\"map\": {}}, \"userInfo\": false}"; 

NSURL * url = [NSURL URLWithString:kURLForAPI]; 

NSMutableURLRequest * req = [NSMutableURLRequest requestWithURL:url]; 
[req setHTTPMethod:@"POST"]; 
[req setHTTPBody:[loginPayload dataUsingEncoding:NSUTF8StringEncoding]]; 
[req setHTTPShouldHandleCookies:YES]; 
[req setValue:@"text/xml charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 
[req setValue:cookie forHTTPHeaderField:@"Cookie"]; 

NSHTTPURLResponse * response = nil; 
NSData * dataResult = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&theError]; 
NSMutableDictionary *dicts; 

if (dataResult) { 
    NSString *resultString = [[NSString alloc] initWithData:dataResult encoding:NSUTF8StringEncoding]; 
    //NSLog(@"login response: %@",resultString); 
    //NSLog(@"response %@", [response allHeaderFields]); 

    dicts = [jsonParser objectWithString:resultString error:&theError]; 
    //dicts = [resultString JSONValue]; 
    if(theError) 
    { 
     NSLog(@"Result %@",[theError description]); 
    } 
+0

Если возможно, покажите нам свой 'resultString'; что облегчит анализ. Из этой ошибки может возникнуть проблема с пустым атрибутом «map», который вы отправляете. – jstevenco

+0

Я использовал jsonlint для проверки JSON, и это дало мне ошибку с форматом даты. Вот строки результата: { "taskDate": newDate ("23 сентября 2011 00:00:00"), "roleTypeId": "МАСТЕРА"} Я получаю сообщение об ошибке на величину taskDate – bakwarte

+0

Это не выглядит как допустимый формат для представления даты, по крайней мере до SBJSON. Я ожидаю увидеть дату как строковый литерал, который вы можете использовать 'NSDate' и' NSDateFormatter' для массажа в соответствии с вашими потребностями или как целое число 'time_t'. По крайней мере, это то, как я использовал структуру Стига для работы с датами. Так что, что у вас есть, опустив 'newDate()', вставляющий строковый литерал, и вам должно быть хорошо идти. – jstevenco

ответ

0

Не используйте NSString для создания JSON тело запроса. Использовать [NSDictionary dictionaryWithObjects: objects forKeys: keys]; а затем просто сделать [dictionaryinput JSONRepresentation]; Он создаст для вас строку JSON. Это лучший способ сериализации и десериализации JSON-объекта и сэкономит массу неприятностей.

+0

Да, я использую это только для проверки. Основная проблема связана с моим значением ответа У меня есть возвращаемая пара ключ-значение: «taskDate»: newDate (000000) Парсер JSON не может справиться с этим. Как это исправить? – bakwarte

+0

Попросите вернуться, чтобы вернуть JSON, а не какой-то пользовательский JSON-подобный формат. –

0

Дата создания в этом формате.

NSStime *time = [NSString stringWithFormat:@"/Date(%@)/", [NSNumber numberWithLongLong:[[NSDate date] timeIntervalSince1970] * 1000]];