JSON:了解 Objective-C 中的格式

JSON: Understanding format in Objective-C

鉴于以下 JSON 有效载荷,我想从 keyB->key2 中提取“023”:

JSON 负载:

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

这是我应用的代码:

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

但是打印的值如下:

VALUE: (
    023
)

我想去掉括号“(”。我是不是以错误的方式进行提取?

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

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

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

因为数组只有一项,所以您可以调用 -lastObject or -firstObject

首先,你给定的 json 是无效的儿子 :( 你引用了很多人的话。如果我们像这样转义它:

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

那么,就可以了。 现在,您在这里拥有的是一个包含 2 个键(A 和 B)的子对象。并且 KeyB 关联了一个 json 数组 含义:

 jsonResult[@"keyB"];

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

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

也许

int twentyThree = str.intValue;