解析嵌套 NSDictionary 中的数字和布尔值



假设我将一个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中表示数字和布尔值的人都可以这样做。

任何生成JSON的人都应该记录他们正在生产的内容。因此,如果他们坚持将布尔值表示为字符串,那么他们应该记录哪些可能的字符串将用于表示真和假。然后这只是字符串比较的问题。

对于存储为字符串的数字,您可以使用整数值或双精度值,这对字符串来说效果很好。

最新更新