如何在 iOS 中禁用来自 Web 服务调用的自动排序 JSON 字典响应
Posted
技术标签:
【中文标题】如何在 iOS 中禁用来自 Web 服务调用的自动排序 JSON 字典响应【英文标题】:how to disable auto sorting JSON dictionary response from web service call in iOS 【发布时间】:2018-01-17 18:09:26 【问题描述】:我在我的应用程序中使用了一项网络服务。不幸的是,我并不期待 响应根据键自动排序。我需要原始回复 它在网络上。谁能让我知道如何在 ios 应用程序中执行此操作。我正在使用 以下代码显示响应。
NSDictionary *response = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
【问题讨论】:
【参考方案1】:JSON 对象具有无序键。 iOS 没有对数据结构中的键进行排序。当您打印出结果时,它只是对它们进行排序(为方便起见)。在数据结构内部,没有保证顺序。这取决于事情如何散列。
由于 JSON 中不存在有序字典,因此无法使用 NSJSONSerialization
创建“有序字典”。解决此问题的方法是使用字典列表,例如:
[ "First": "A" , "Second", "B" ]
因为它是一个列表,所以承诺保持有序。
如果您无法更改格式,并且格式依赖于顺序,那么它不是正确的 JSON,您必须以其他方式解析它。通常我会尝试进行简单的字符串解析(例如,在换行符上拆分)以找到可以交给解析器的大型有效 JSON“块”。
【讨论】:
谢谢罗伯。非常感谢您对此的回复。我也在尝试获得一个替代解析器来实现这一目标。 我不知道 iOS 上有任何解析器可以做到这一点。它必须返回一个非标准类型(即它不能使用常规的NSDictionary
)。 “有序 JSON 对象”打破了 JSON 的基本承诺。如果你能找到一个流式解析器(比如 XML 的 SAX),你可以用它来得到你想要的,但我不知道 iOS 上有任何流式 JSON 解析器。不过,这正是您要寻找的。span>
啊,YAJL 可能会这样工作:github.com/gabriel/yajl-objc 具体参见 YAJLParser。以上是关于如何在 iOS 中禁用来自 Web 服务调用的自动排序 JSON 字典响应的主要内容,如果未能解决你的问题,请参考以下文章
如何在Eclipse Web项目中禁用“autodeploy”到服务器功能
如何在 iOS 11 应用程序登录屏幕中禁用新密码自动填充功能?