JSON:了解Objective-C中的格式

时间:2015-01-22 18:09:46

标签: objective-c json nsdictionary

鉴于以下JSON有效负载,我想提取" 023"来自keyB-> key2:

JSON Payload:

{
    "keyA" : {"lon": 139, "lat" : 35},
    "keyB" : [ {"key1" : "value", "key2" : "023"} ]
}

这是我申请的代码:

    NSDictionary * subResults = jsonResult[@"keyB"];
    NSLog(@"VALUE: %@", [subResults valueForKey:@"key2"])

但是,该值打印如下:

VALUE: (
    023
)

我想摆脱括号"("。我是否以错误的方式接近提取?

2 个答案:

答案 0 :(得分:3)

首先,你给出的json不是有效的儿子:(你有很多引用。如果我们这样逃避:

{"keyA":{"lon":139,"lat":35},"keyB":[{"key1":"value\" clouds","key2":"023"}]}

然后,没关系。 现在,你在这里有一个儿子对象,包含2个键(A和B)。 KeyB与json数组相关联 意思是:

 jsonResult[@"keyB"];

不返回NSDictionnary,而是返回包含1个NSDictionary的NSArray。 现在,如果您尝试获取值“023”,则应使用

NSString str = jsonResult[@"keyB"][0][@"key2"]; // return "023"

也许

int twentyThree = str.intValue;

答案 1 :(得分:2)

括号显示您想要的值在数组中。

NSData strAsData = …;
NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:strAsData options:0 error:nil];
NSArray *subResults = jsonResult[@"keyB"];
NSDictionary *subSubResults = subResults[0];

NSLog(@"VALUE: %@", subSubResults[@"key2"]);

由于该数组只有一个项目,因此您可以使用对-lastObject-firstObject的调用