我有一个包含大量数据的json文件:
[{"pkg_id": 385 ,"pkg_name":" 10OZ NR 1/24 "},
{"pkg_id": 822 ,"pkg_name":" 12OZ CN "},
{"pkg_id": 422 ,"pkg_name":" 12OZ CN 6/4 "}]
如何获取数组中pkg_id
的列表。
我理解如果只有一行,那么我可以做
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
NSArray* array = [jsonDict objectForKey:@"pkg_id"];
如何进行多行。如果我必须开始循环,如何枚举字典中的行数?
也试过了。
for (NSDictionary *status in jsonDict)
{
[newArray addObject:[status objectForKey:@"pkg_id"]];
}
但是NSLog(@"%@", newArray);
外部循环给出了空值。
答案 0 :(得分:2)
给定原始JSON,我们可以将它转换为NSDictionary或NSArray,如下所示:
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
此时,jsonDict将 nil , NSArray 或 NSDictionary 。如果是字典,则可以遍历密钥,如果是数组,则可以遍历索引。
迭代 NSDictionary :
的键for(id key in [jsonDict allKeys]) {
...
}
迭代 NSArray 的索引:
for(id element in jsonDict) {
...
}
在您的情况下,您有一个NSArray。如果你想获得所有pkg_ids的列表,那么你可以这样做:
NSMutableArray *pkg_ids = [NSMutableArray array];
for(NSDictionary *dictionary in jsonDict) {
[pkg_ids addObject:[dictionary objectForKey@"pkg_id"]];
}
// Now pkg_ids = {385, 822, 422}
// Note, this is untested -- there may be minor tweaks but the idea stays the same.
答案 1 :(得分:1)
使用NSArrays的一个有趣的小功能:
$ cat test.m
#import <Foundation/Foundation.h>
int main(void) {
NSArray *ary = @[@{@"pkg_id": @385 ,@"pkg_name":@" 10OZ NR 1/24 "},
@{@"pkg_id": @822 ,@"pkg_name":@" 12OZ CN "},
@{@"pkg_id": @422 ,@"pkg_name":@" 12OZ CN 6/4 "}];
NSLog(@"%@", [ary valueForKeyPath:@"pkg_id"]);
}
$ clang -framework Foundation test.m
$ ./a.out
2013-05-20 17:27:45.798 a.out[2793:707] (
385,
822,
422
)
$ 0
从实际字符串:
$ cat test.m
#import <Foundation/Foundation.h>
NSString *jsonString = // Next line
@"[{\"pkg_id\": 385 ,\"pkg_name\":\" 10OZ NR 1/24 \"},"
" {\"pkg_id\": 822 ,\"pkg_name\":\" 12OZ CN \"},"
" {\"pkg_id\": 422 ,\"pkg_name\":\" 12OZ CN 6/4 \"}]";
int main(void) {
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
NSLog(@"%@", [jsonArray valueForKeyPath:@"pkg_id"]);
}
$ clang -framework Foundation test.m
$ ./a.out
2013-05-20 18:30:34.346 a.out[2988:707] (
385,
822,
422
)
$ 0