NSJSONSerialization解析不返回响应Array / Dictionary中的所有值

时间:2013-12-20 17:31:32

标签: ios5 nsurlconnection nsjsonserialization

我使用NSURLConnectionDelegate本地NSJsonSerialization。我得到的是REST响应,但并不是它包含的所有值。

我在网络浏览器中有这个JSON响应:

{
"error" : {
    "err_num" : 0,
    "err_message" : ""
}, 
"company" : {
    "id" : 1,
    "name" : "company_string1"
},
"company" : {
    "id" : 7,
    "name" : "company_string2"
},
"company" : {
    "id" : 19,
    "name" : "company_string3"
},
"company" : {
    "id" : 13,
    "name" : "company_string4"
},
"company" : {
    "id" : 14,
    "name" : "company_string5"
}
}

我正在异步使用NSURLConnection并实现

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    [receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [receivedData appendData:data];
}   // receivedData is NSMutuableData initialized before 

并在connectionDidFinishLoading我做:

NSMutableDictionary *array = [NSJSONSerialization JSONObjectWithData:self.receivedData options:NSJSONReadingMutableContainers error:&error];

当我登录时,我得到了

{
    "err_message" = "";
   "err_num" = 0;
}
{
    id = 14;
    name = "company_string5";
}

如果我使用NSJSONReadingAllowFragments,我会

{
    "err_message" = "";
    "err_num" = 0;
} 
{
    id = 1;
    name = company_string1;
}

同时检查NSDictionary,但我得到相同的结果。由于重复键,这里是JSON的一些问题,它只返回最后一个/第一个吗?我也碰巧在线查看,几乎所有人都说它是一个有效的JSON。它没有给出任何错误!!

1 个答案:

答案 0 :(得分:0)

嗯,JSON不是一个数组(除非你遗漏了一些字符)。你可能通过“数组”枚举,因此得到字典值,没有键。 NSLog“数组”本身的值,你会看到你所有的键(实际上是一个NSDictionary)。

(如果密钥真的都是“公司”,你只会收到一个“公司”元素。多个相同的密钥将是从另一端发送的无效JSON。)