Как отличить 0/1 от ложного / истинного с помощью NSJSONSerialization?
Мне нужно иметь дело с данными JSON с произвольными структурами в iOS.
Тем не мение, NSJSONSerialization
преобразовать истинное / ложное значение в NSNumber
,
Итак, мой вопрос, как я могу сказать, когда NSNumber
преобразуется из логического значения true
/ false
по сравнению с фактическим числом 0
/ 1
?
Примечание: я в курсе [NSNumber numberWithBool]
Но здесь я хочу выяснить, когда это уместно назвать. Я также знаю, что написание собственного парсера решает эту проблему, но я хочу убедиться, что нет более простого решения, прежде чем я пойду по этому пути.
2 ответа
Решение:
if ([parsedValue isKindOfClass [NSNumber class]] &&
strcmp([parsedValue objCType], @encode(char)) == 0) {
// parsedValue is converted from 'true' or 'false' in JSON.
}
Одна странная вещь NSJSONSerielization
наборы objCType
логическое значение для @encode(char)
вместо @encode(BOOL)
,
На самом деле вы не можете знать, был ли NSNumber "логическим". Но независимо от того, вызовите boolValue, и если это было логическое значение, вы получите правильное значение. Если это было число, вы получаете значение true для всех значений, кроме 0.