Как отличить 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.

Другие вопросы по тегам