在iOS中理解并使用此JSON数据

时间:2011-11-22 20:56:23

标签: ios json ios5 nsdictionary


我创建了一个返回JSON的Web服务,我认为。返回的数据如下所示:

{"invoice":{"id":44,"number":42,"amount":1139.99,"checkoutStarted":true,"checkoutCompleted":true}}

对我来说,这看起来像是有效的JSON。

在iOS5中使用本机JSON序列化程序,我将数据捕获为NSDictionary。

NSError *error;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[request responseData] options:kNilOptions error:&error];
    NSLog(@"json count: %i, key: %@, value: %@", [json count], [json allKeys], [json allValues]);

日志的输出是:

json count: 1, key: (
    invoice
), value: (
        {
        amount = "1139.99";
        checkoutCompleted = 1;
        checkoutStarted = 1;
        id = 44;
        number = 42;
    }
)

因此,在我看来,JSON数据有一个NSString密钥“invoice”,其值为NSArray ({amount = ..., check...})

因此,我将值转换为NSArray:

NSArray *latestInvoice = [json objectForKey:@"invoice"];

但是,当单步执行时,它表示latestInvoice不是CFArray。如果我打印出数组中的值:

for (id data in latestInvoice) {
        NSLog(@"data is %@", data);
    }

结果是:

data is id
data is checkoutStarted
data is ..

我不明白为什么它只返回“id”而不是“id = 44”。如果我将JSON数据设置为NSDictionary,我知道密钥是NSString但是值是多少?是NSArray还是其他什么?

这是我读过的教程: http://www.raywenderlich.com/5492/working-with-json-in-ios-5

编辑:从答案来看,似乎NSDictionary * json的“价值”是另一个NSDictionary。我认为这是NSArray或NSString这是错误的。换句话说,[K,V]代表NSDictionary * json = [@“invoice”,NSDictionary]

3 个答案:

答案 0 :(得分:5)

问题在于:

NSArray *latestInvoice = [json objectForKey:@"invoice"];

实际上,它应该是:

NSDictionary *latestInvoice = [json objectForKey:@"invoice"];

...因为你所拥有的是字典而不是数组。

答案 1 :(得分:2)

Wow,原生JSON解析器,甚至没有注意到它被引入。

NSArray *latestInvoice = [json objectForKey:@"invoice"];

这实际上是一个NSDictionary,而不是NSArray。阵列没有钥匙。你似乎有能力来自这里。

答案 2 :(得分:1)

在这里,我认为你必须像这样使用nsdictionary

NSData* data = [NSData dataWithContentsOfURL: jsonURL];

NSDictionary *office = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

NSDictionary *invoice = [office objectForKey:@"invoice"];