密钥未知时获取对象?
Posted
技术标签:
【中文标题】密钥未知时获取对象?【英文标题】:Getting object when key is unknown? 【发布时间】:2011-10-04 13:53:11 【问题描述】:我有一些如下所示的 json,我正试图将其转换为 nsdictionaries。我的问题是 1、5 和 4 是键,具有不可预测的值。我如何在不知道密钥的情况下获取每个对象 - "id":"A","name":"Nike"?
// JSON looks like:
"shops":
"1":"id":"A","name":"Nike",
"5":"id":"G","name":"Apple"
"4":"id":"I","name":"Target"
// how to step thru this?
NSArray *shopsArray = [[shopsString JSONValue] objectForKey:@"shops"];
【问题讨论】:
【参考方案1】:objectForKey:@"shops"
返回的对象实际上是NSDictionary
实例,而不是NSArray
,因为键实际上是字符串,而不是数值。
出于您的目的,您可以在生成的NSDictionary
上简单地调用-allValues
。
NSDictionary *shops = [[shopsString JSONValue] objectForKey:@"shops"];
for(id obj in [shops allValues])
//do stuff with obj...
编辑:如果您需要对值进行排序,则可以执行以下操作:
首先,将传入的 JSON 改成这种结构:
"shops":[
"key":"1", "id":"A","name":"Nike",
"key":"5","id":"G","name":"Apple",
"key":"4", "id":"I","name":"Target"
]
然后,您可以对数组中的对象进行排序。
NSArray *shops = [[shopsString JSONValue] objectForKey:@"shops"];
for(NSDictionary *shop in shops)
NSString *key = [shop objectForKey:@"key"];
//...
【讨论】:
刚刚检查了 json.org。将裸数字用作 JSON 对象中值的 key 是非法的。此外,如果我使用 JSON 解析器将 JSON 对象(而不是 JSON 数组)解码为NSArray
只是因为键都恰好是数字,我会扔掉它并得到一个有效的。
@JeremyP Snap,我在用纯 javascript 思考。将修改。
使用 NSDictionary 和 allValues 返回一个不是 1,5,4 顺序的集合。有没有办法按顺序通过?以上是关于密钥未知时获取对象?的主要内容,如果未能解决你的问题,请参考以下文章
创建 azure vm 时,terraform 抛出“无效或未知的密钥:区域”