如何在 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 应用程序登录屏幕中禁用新密码自动填充功能?

如何从 iOS 应用程序调用在 Python 的 ladon 框架中开发的 Web 服务?

如何使用 ARC 在 iOS 中处理自动释放的对象

如何在IOS中禁用自动省略号

如何禁用传输编码:chunked websphere