Я делаю запрос на сервер для некоторых результатов, которые должны быть возвращены в формате 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]);
}
Если возможно, покажите нам свой 'resultString'; что облегчит анализ. Из этой ошибки может возникнуть проблема с пустым атрибутом «map», который вы отправляете. – jstevenco
Я использовал jsonlint для проверки JSON, и это дало мне ошибку с форматом даты. Вот строки результата: { "taskDate": newDate ("23 сентября 2011 00:00:00"), "roleTypeId": "МАСТЕРА"} Я получаю сообщение об ошибке на величину taskDate – bakwarte
Это не выглядит как допустимый формат для представления даты, по крайней мере до SBJSON. Я ожидаю увидеть дату как строковый литерал, который вы можете использовать 'NSDate' и' NSDateFormatter' для массажа в соответствии с вашими потребностями или как целое число 'time_t'. По крайней мере, это то, как я использовал структуру Стига для работы с датами. Так что, что у вас есть, опустив 'newDate()', вставляющий строковый литерал, и вам должно быть хорошо идти. – jstevenco