NSJSONSerialization неправильно отображает логическое значение

Я читаю данные из The Joys of Code. API возвращает данные в формате JSON, где логические переменные записываются следующим образом:

{ "obj" :
   { 
      "sharing":false,
      "modified":"tuesday"
   }
}

Обратите внимание, что в разделе sharing:false нет слово false заключено в кавычки. Затем я использую NSJSONSerialization для анализа этого JSON в объект (NSDictionary в этом примере).

Проблема в том, что «совместное использование»: false или «совместное использование»: true всегда создает объект с общим доступом = 0, где 0 — это NSNumber со значением 0.

Мой вопрос заключается в том, является ли это допустимым JSON, а NSJSONSerialization работает неправильно или исходный JSON недействителен.


person Paul de Lange    schedule 09.12.2012    source источник
comment
с этим все в порядке. должно быть в том, как вы пытаетесь прочитать словарь, полученный из NSJSON   -  person Daij-Djan    schedule 09.12.2012
comment
Ok. Я должен был проверить это в первую очередь. Проблема в сервере. Он всегда возвращает ложь.   -  person Paul de Lange    schedule 09.12.2012
comment
:) Я также часто виню системные классы и в целом ошибаюсь :/   -  person Daij-Djan    schedule 09.12.2012
comment
@PauldeLange, вот что я сказал. Если это правда, вы получите 1. Не ноль.   -  person iDev    schedule 09.12.2012


Ответы (2)


NSJSONSerialization отлично работает для меня с вышеуказанным json (вводом false и true):

NSData *json = [@"{ \"obj\" : \
                { \
                \"sharing\":false, \
                \"modified\":\"tuesday\" \
                } \
                }" dataUsingEncoding:NSUTF8StringEncoding];
id dict = [NSJSONSerialization JSONObjectWithData:json options:0 error:nil];
id sharing = dict [@"obj"][@"sharing"];
NSLog(@"%d", [sharing boolValue]);

json = [@"{ \"obj\" : \
                { \
                \"sharing\":true, \
                \"modified\":\"tuesday\" \
                } \
                }" dataUsingEncoding:NSUTF8StringEncoding];
dict = [NSJSONSerialization JSONObjectWithData:json options:0 error:nil];
sharing = dict [@"obj"][@"sharing"];
NSLog(@"%d", [sharing boolValue]);
person Daij-Djan    schedule 09.12.2012
comment
Спасибо. Я только что сделал то же самое, и это работает. -› была ошибка сервера, которая всегда возвращала false. - person Paul de Lange; 09.12.2012

Это действительно. Вы всегда можете получить BOOL от NSNumber как [number boolValue] и проверить его как

if ([number boolValue])

or

if ([number boolValue] == YES)
person iDev    schedule 09.12.2012
comment
Хорошо, значит, это действительно? У вас есть ссылка, чтобы я мог запросить у Apple, почему NSJSONSerialization всегда сопоставляет его с NO? - person Paul de Lange; 09.12.2012
comment
@PauldeLange, это не должно быть всегда NO .. Должно быть 0 для false и 1 для true. - person iDev; 09.12.2012
comment
@PauldeLange, вы спрашиваете о технической поддержке, developer.apple.com/support/technical/submit.. Только что проверил несколько других вопросов о bool и json и похоже, что мой ответ выше должен помочь в этой ситуации. См. этот вопрос здесь stackoverflow.com /questions/7530173/.. Не знаю, почему вы не понимаете этого.. - person iDev; 09.12.2012