假设我将一个JSON字符串加载到NSDictionary中,该字符串将一些数字写为字符串。生成的 NSDictionary 可能如下所示:
NSDictionary* example = @{
@"aNumber": @"1",
@"aFloat": @"2.9708",
@"aBool": @"true",
@"aNestedDict": @{
@"more": @"220",
@"evenMore": @"false",
@"anArray": @[
@"1",
@"2"
]
}
};
我想将浮点数、整数和布尔值('真"、"假"、"是"、"否 - 不区分大小写")值解析为各自的 Objective-c 类类型。我环顾四周,但找不到任何内置 API 的示例来执行此操作。
(放大,因为人们没有阅读这个问题)
我是否被困在编写递归解析器并手动转换每个值,或者 Apple 是否提供了一个内置的 API 来为我递归解析它?
没有 API 来做到这一点,但是你可以创建一个辅助函数来解决这个问题。然而,苹果提供的API是NSString
上的辅助函数,即:.integerValue
、.doubleValue
、.boolValue
。然而,这不仅限于NSString,而且也不是全面/智能的。
因此,如果要将字符串解析为 BOOL 类型的变量,可以执行以下简单操作:
- (NSNumber *)parseBool:(NSString *)value
{
if( [value caseInsensitiveCompare:@"yes"] == NSOrderedSame || [value caseInsensitiveCompare:@"true"] == NSOrderedSame )
{
return @YES;
} else if ([value caseInsensitiveCompare:@"no"] == NSOrderedSame || [value caseInsensitiveCompare:@"false"] == NSOrderedSame )
{
return @NO;
} else
{
return nil;
}
}
编辑:对于 int 和 double 只需使用:
NSString *string = @"1";
NSInteger intValue = string.integerValue;
double doubleValue = string.doubleValue;
不带小数的数字、布尔值、空值、字典和数组。因此,任何想要在JSON中表示数字和布尔值的人都可以这样做。
任何生成JSON的人都应该记录他们正在生产的内容。因此,如果他们坚持将布尔值表示为字符串,那么他们应该记录哪些可能的字符串将用于表示真和假。然后这只是字符串比较的问题。
对于存储为字符串的数字,您可以使用整数值或双精度值,这对字符串来说效果很好。