我需要在 iOS 中处理具有任意结构的 JSON 数据。
但是,NSJSONSerialization
将 true/false 值转换为NSNumber
.
所以我的问题是,如何判断 a 何时NSNumber
从布尔值true
/转换false
为实际数字0
/ 1
?
注意:我知道[NSNumber numberWithBool]
,但在这里,我想弄清楚何时调用它是合适的。我也知道编写自己的解析器可以解决这个问题,但我想确保在完成这条路线之前没有更简单的解决方案。
我需要在 iOS 中处理具有任意结构的 JSON 数据。
但是,NSJSONSerialization
将 true/false 值转换为NSNumber
.
所以我的问题是,如何判断 a 何时NSNumber
从布尔值true
/转换false
为实际数字0
/ 1
?
注意:我知道[NSNumber numberWithBool]
,但在这里,我想弄清楚何时调用它是合适的。我也知道编写自己的解析器可以解决这个问题,但我想确保在完成这条路线之前没有更简单的解决方案。
解决方案是:
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 还是布尔值,您都会得到正确的值。如果它是一个数字,则除 0 之外的所有值都为真。