2013-12-20 56 views
0

我正在使用原生NSURLConnectionDelegateNSJsonSerialization。我得到REST响应,但不是它包含的所有值。NSJSONSerialization解析不返回所有值的响应数组/字典

我在Web浏览器此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。它没有给出任何错误!

回答

0

那么,JSON不是一个数组(除非你遗漏了一些字符)。你大概可以通过“数组”来枚举,从而获得字典值,而不用键。 NSLog本身的“数组”的值,你会看到你所有的键(在实际上是一个NSDictionary)。

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

+0

这也正是同样的JSON响应该我进入浏览器,我推测它最初是一个无效的JSON,但现在我认为我是正确的。它应该是一个嵌套的JSON,只有一个“公司”的关键字。 – Vacca

+0

@Vacca什么应该嵌套JSON?如果字典中有多个相同的键(JSON“对象”),那么这是无效的JSON。 –