【问题标题】:How to tell 0/1 from false/true with NSJSONSerialization?如何用 NSJSONSerialization 区分 0/1 和 false/true?
【发布时间】:2013-09-27 17:41:20
【问题描述】:

我需要在 iOS 中处理任意结构的 JSON 数据。

但是,NSJSONSerialization 将 true/false 值转换为 NSNumber

所以我的问题是,我如何判断 NSNumber 何时从布尔值 true/false 转换为实际数字 0/1

注意:我知道[NSNumber numberWithBool],但在这里,我想弄清楚何时调用它是合适的。我也知道编写自己的解析器可以解决这个问题,但我想确保在我完成这条路线之前没有更简单的解决方案。

【问题讨论】:

    标签: ios objective-c cocoa-touch nsjsonserialization


    【解决方案1】:

    解决办法是:

    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)

    【讨论】:

    【解决方案2】:

    事实上,您无法知道 NSNumber 是否“是”布尔值。但无论调用 boolValue 还是布尔值,您都会得到正确的值。如果它是一个数字,则除 0 以外的所有值都为真。

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 1970-01-01
      • 2021-07-10
      • 2012-09-12
      • 2015-11-11
      • 2021-11-03
      • 2012-08-14
      • 1970-01-01
      相关资源
      最近更新 更多