在Objective C中按顺序保持JSON对象的字典键
Posted
技术标签:
【中文标题】在Objective C中按顺序保持JSON对象的字典键【英文标题】:Keeping dictionary keys of JSON Object in order in Objective C 【发布时间】:2011-08-25 23:34:04 【问题描述】:我在目标 C 中使用 JSON-FRAMEWORK 来解析 JSON 对象。 当我调用 [jsonString JSONValue] 时,我得到了一个字典,但键的顺序与我正在解析的 JSON 对象的顺序不同。无论如何要保持这个顺序不变吗?
【问题讨论】:
为什么需要保持订单不变?它是一个字典——按键访问一个元素是一个 O(1) 操作。 因为我有一个具有索引属性的单独对象。该索引应该与键在 json 对象中的顺序相对应。由于字典的键似乎是无序的,我想我必须想办法在我的对象和它应该在字典中对应的键之间建立连接 你可以简单地存储字典键而不是索引... 对。或者我可能只是将索引传入 json 对象。 嗯,重点是“对 JSON 对象的索引”毫无意义,因为 JSON 对象是无序的。 【参考方案1】:在 JSON 对象中,根据定义,键值对的顺序没有意义。该规范允许 JSON 生产者以任何它想要的方式排列它们,即使是随机的——并且不需要解析器来保留顺序。 RFC 4627 说:
对象是零个或多个名称/值的无序集合 对,其中名称是字符串,值是字符串、数字、 布尔值、空值、对象或数组。
如果您需要保留顺序,那么您所拥有的不是 JSON,而是一种家庭定义的格式,只是表面上看起来像 JSON。
【讨论】:
也许“表面上看起来像”有点苛刻。它的行为大部分类似于 JSON,但会有不小的区别。以上是关于在Objective C中按顺序保持JSON对象的字典键的主要内容,如果未能解决你的问题,请参考以下文章
在Objective-C中按一个属性对自定义对象的NSSet进行排序
当我从 @RestControler 返回对象时如何在 json 中保持映射键顺序
如何在Objective C中使用NSData创建json对象?
如何在Objective C中将对象序列化为JSON? [复制]