Нежелательная строка заголовка XML, поступающая в ответ JSON в iOS

#ios #json

#iOS #json

Вопрос:

Проблема, с которой я сталкиваюсь, заключается в том, что когда я извлекаю данные JSON с сервера, вместе с ними появляется строка заголовка XML. Я пробовал некоторые изменения в коде, но тщетно. Данные ответа идеальны, но проблема заключается в заголовке XML. Итак, на данный момент я попробовал substring строку ответа и сумел извлечь правильные данные JSON. Но то, что я хочу знать, является причиной этой проблемы и что я здесь делаю не так.

Это мой код извлечения JSON.

 NSURL *url=[NSURL URLWithString:@"myServiceURL"];
NSData *response = [NSData dataWithContentsOfURL:url];
NSString *badStr = [NSString stringWithUTF8String:[response bytes]];
NSString *goodStr = [badStr substringFromIndex:76];
NSString *finalStr = [goodStr substringToIndex:[goodStr length]-9];
NSData *goodData = [finalStr dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:goodData options: NSJSONReadingMutableContainers error: amp;error];
  

Это включает в себя код для выполнения подстроки в полученном ответе JSON.

И вот пример ответа JSON, который я получаю.

 <?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">
[{"Title":"DemoTitle","CreationDate":"06/06/2014","Description":"DemoDescription"}]
</string>
  

Требуется руководство. Спасибо.

Комментарии:

1. Это не JSON, это XML со встроенным JSON в виде строки. Вам нужно заставить сервер просто отправить вам JSON, или вам нужно обработать XML как XML, получить строку, а затем обработать ее как JSON.

2. Спасибо за быстрый ответ. Я посмотрю на это. И можете ли вы сказать, почему он появляется в такой форме? то есть XML со встроенным JSON.

3. Извините, я понятия не имею. Вам следует спросить людей, которые предоставляют услугу 🙂 Скорее всего, услуга предоставляется через какой-то устаревший XML или SOAP или что-то в этом роде, и люди внедрили туда JSON по другим причинам. Определенно, не пытайтесь просто получить подстроку JSON, хотя это может вас укусить в будущем, даже если сейчас кажется, что это работает.

4. Конечно. Обязательно изучите это. Спасибо за разъяснение!

Ответ №1:

Если по какой-либо причине вы не можете заставить сервер прекратить отправку данных в формате xml со встроенным json, вы можете сначала проанализировать XML с помощью NSXMLParser, а затем проанализировать JSON из этого.

Комментарии:

1. Вероятно, единственный способ сделать это. Спасибо.