#iphone #xcode #json #parsing
#iPhone #xcode #json #синтаксический анализ
Вопрос:
Я использую этот анализатор SBJson
У меня есть это значение JSON, это допустимый JSON, но я все равно получаю эту ошибку
-JSONValue failed. Error trace is: (
"Error Domain=org.brautaset.JSON.ErrorDomain Code=3 "Unrecognised leading character" UserInfo=0x63726a0 {NSLocalizedDescription=Unrecognised leading character}"
{
"Account": {
"LoginName": "My Name",
"Name": "My Name"
},
"UseInvoiceAddressAsDeliveryAddress": "true",
"InvoiceAddress": {
"Zip": "16444",
"CountryId": "1",
"City": "SSSS",
"Line2": "8",
"Line1": "Street 4"
},
"Phone": "12345678",
"FirstName": "My",
"LastName": "Name",
"Email": "sample@example.com",
"CellPhone": "234254233"
}
Вот мой код, я думаю, что я получаю эту ошибку JSON, потому что я не указываю какой-либо тип контента, я делаю это, но все равно это не работает
SBJsonWriter *writer = [[SBJsonWriter alloc] init];
NSString *jsonConvertedObj = [writer stringWithObject:customerObject];
NSLog(@"The converted JSON String .... %@",jsonConvertedObj);
NSData *postData = [jsonConvertedObj dataUsingEncoding:NSASCIIStringEncoding];
NSMutableData *myMutablePostData = [NSMutableData dataWithData:postData];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:myURL];
[request setRequestMethod:@"POST"];
[request setClientCertificateIdentity:identity];
[request setValidatesSecureCertificate:NO];
[request addData:myMutablePostData withFileName:@"" andContentType:@"application/json" forKey:@""];
[request startSynchronous];
И это ошибка, которую я получаю от сервера :
The server encountered an error processing the request. The exception message is 'The incoming message has an unexpected message format 'Raw'. The expected message formats for the operation are 'Xml'; 'Json'. This can be because a WebContentTypeMapper has not been configured on the binding.
Комментарии:
1. Могу я спросить, какую библиотеку JSON вы используете?
2. SBJsonParser github.com/stig/json-framework
3. Как вы создаете
myMutablePostData
?4. SBJsonWriter *writer = [[Выделение SBJsonWriter] инициализация]; NSString *jsonConvertedObj = [запись строки с объектом:customerObject]; NSLog(@»Преобразованная строка JSON…. %@»,jsonConvertedObj); NSData * postData = [jsonConvertedObj dataUsingEncoding:NSASCIIStringEncoding]; NSMutableData *myMutablePostData = [NSMutableData dataWithData:postData]; На самом деле мне не нужен изменяемый postdata, но это было только для тестирования
Ответ №1:
Я решил это сам, вот что решило это…
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:myURL];
[request setPostBody:myMutablePostData];
[request setRequestMethod:@"POST"];
[request setClientCertificateIdentity:identity];
[request setValidatesSecureCertificate:NO];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request setDelegate:self];
[request startSynchronous];
Как и предполагалось, я использовал неправильный тип HttpRequest, а затем я не настраивал тип содержимого.
Ответ №2:
Ну, я думаю, возможно, что у вас есть какой-то невидимый недопустимый символ. Также возможно, что это ошибка в используемой вами библиотеке. Поэтому я предлагаю вам попробовать проанализировать его с помощью другой библиотеки. Если что-то не так с JSON, вы должны получить аналогичную ошибку с другой библиотекой. Если другая библиотека анализирует ваш JSON без проблем, вам, вероятно, следует отправить отчет об ошибке для SBJSON.
Я использую JSONKit, и у меня это всегда отлично получалось, и это действительно просто в использовании.
Комментарии:
1. НЕТ, я думаю, я получаю эту ошибку, потому что я не устанавливаю ContentType. Я делаю это как formdatarequest *request = [ASIFormDataRequest requestWithURL: myURL]; [запрос setRequestMethod:@»POST»]; [запрос setClientCertificateIdentity:identity]; [запрос setValidatesSecureCertificate: NO]; [запрос addData: myMutablePostData с именем файла: @»» andContentType:@»application / json» forKey:@»»]; [запрос запускается синхронно];
2. ошибка с сервера Сервер обнаружил ошибку при обработке запроса. Сообщение об исключении гласит: «Входящее сообщение имеет неожиданный формат сообщения «Raw». Ожидаемые форматы сообщений для операции — ‘Xml’; ‘Json’. Это может быть связано с тем, что WebContentTypeMapper не был настроен для привязки.
Ответ №3:
Судя по тому, что вы вставили, похоже, что перед запуском вашего JSON есть несколько символов новой строки. Если это действительно так, возможно, именно поэтому вы получаете эту ошибку.
Комментарии:
1. Я обновил свой пост, это связано с типом контента, пожалуйста, скажите мне, как я мог бы решить эту проблему.
2. Донито, все еще кажется, что с отправляемым вами JSON что-то не так. Вы что-то оборачиваете вокруг своей строки JSON? Не могли бы вы вставить точную строку JSON, которую вы отправляете? И не могли бы вы, пожалуйста, подтвердить, что перед строкой JSON нет новых строк? Я просматриваю ваш последний комментарий к ответу Эрика Б., и он подтверждает, что что-то не так со строкой JSON, которую вы отправляете.
3. Строка JSON, упомянутая в исходном сообщении, является той, которую я отправляю. Я протестировал ту же строку JSON непосредственно на сервере, и она работает нормально, но при отправке ее через iPhone возникают проблемы..