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;
鉴于以下 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;