Сервис Json возвращается как HTML

0

Я звоню в стороннюю службу JSON

NSString* urlString = [NSString stringWithFormat:BASE_JSON_URL, address];
    NSURL* urlAddressJSonUrl = [NSURL URLWithString:urlString];

    dispatch_async(globalQueue,
                   ^{
                       NSData* addressData = [NSData dataWithContentsOfURL:urlAddressJSonUrl];

                       [self performSelectorOnMainThread:@selector(resolveFromJSonResult:)
                                              withObject:addressData waitUntilDone:YES];
                   });

скопируйте и вставьте urlString в браузер, получив статус ok, и я получу свой объект JSON в качестве словаря. Преобразование NSData приводит к NSDictionary следующим образом: nil

NSDictionary* jsonAddressResult = [NSJSONSerialization JSONObjectWithData:jsonResponseData options:NSJSONReadingAllowFragments error:&error];

также попытался в параметрах options: kNilOptions и NSJSONReadingMutableContainers |NSJSONReadingAllowFragments но я все равно получил NSJSONReadingMutableContainers |NSJSONReadingAllowFragments.

преобразование NSData в NSString оскорбило, что результатом является HTML:

(null)<style>body{color:#black;} span.q{color:#FF0084;} span.ns{color:#0259C4; font-weight:bold;} span.n{color:#666666;} span.at{font-weight:bold;}</style><pre>{ "<span class="ns">places</span>": { 
    "<span class="ns">place</span>": [
      { "<span class="at">place_id</span>": "<span class="q">RaZZuVZQW7xqJM2P</span>", "<span class="at">woeid</span>": "<span class="q">1968212</span>", "<span class="at">latitude</span>": <span class="n">32.045</span>, "<span class="at">longitude</span>": <span class="n">34.769</span>, "<span class="at">place_url</span>": "<span class="q">\/Spain\/Tel+Aviv\/Tel+Aviv</span>", "<span class="at">place_type</span>": "<span class="q">locality</span>", "<span class="at">place_type_id</span>": <span class="n">7</span>, "<span class="at">timezone</span>": "<span class="q">Asia\/Jerusalem</span>", "<span class="at">_content</span>": "<span class="q">Madrid, Madrid, Spain</span>", "<span class="at">woe_name</span>": "<span class="q">Madrid</span>" }
    ], "<span class="at">query</span>": "<span class="q">Madrid, Spain</span>", "<span class="at">total</span>": <span class="n">1</span> }, "<span class="at">stat</span>": "<span class="q">ok</span>" }</pre>

как я могу преобразовать это в JSON или лучше, но вытащить нужные мне данные?

  • 0
    Больше данных заканчивается, чтобы ответить. Пожалуйста, укажите заголовки вашего запроса.
  • 0
    @DustinPfannenstiel добавлен
Теги:

1 ответ

1

во-первых, вы всегда должны иметь четкое представление о том, какие именно данные, возвращаемые ресурсом REST (т.е. скорее, чем пробная версия и ошибка, как то, что вы делаете), используя такие инструменты, как почтальон, вы получаете заголовок content-type ответа:

Изображение 174551

используя эту информацию и используя AFNetworking (что значительно облегчает выполнение таких задач), вы можете зарегистрировать свой тип ответа так:

AFHTTPClient *client = 
    [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:kApiBaseUrl]];
// notice that request parameter encoding may very well be of type json, that 
// not the same as the return header being json or html etc
client.parameterEncoding = AFJSONParameterEncoding;
// here you are setting the return header as 'text/html' b/c that what 
// exactly what it is, if postman said it was of type 'application/json' 
// then you'd put that here
[client setDefaultHeader:@"Accept" value:@"text/html"];

то вы можете опубликовать или сделать так:

NSString *postPath = @"your api resource path";
NSDictionary *params = @{@"param1name": param1value,
                         @"param2name": param2value}; // your request params

[client postpath:postPath parameters:params 
       success:^(AFHTTPRequestOperation *operation, id JSON){
   // here you convert the JSON into an array like structure
   id payload = [NSJSONSerialization JSONObjectWithData:JSON 
                                                options:NSJSONReadingAllowFragments 
                                                  error:nil];
   // process payload
   NSString *fname = payload[@"fname"]; //etc
}failure:^(AFHTTPRequestOperation *operation, NSError *error){
   // handle error
}

Я рекомендую вам прочитать в документах JSONObjectWithData: options: error: особенно часть параметров.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню