2

我有一个包含大数据的 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);外部循环给出空值。

4

2 回答 2

2

给定原始 JSON,我们可以将其转换为 NSDictionary 或 NSArray,如下所示:

NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];

此时, jsonDict 将是nilNSArrayNSDictionary。如果它是字典,则可以遍历键;如果它是数组,则可以遍历索引。

遍历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.
于 2013-05-20T22:36:24.073 回答
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
于 2013-05-20T22:29:36.883 回答