ios - iOS开发读取JSON字符串时如何保持原来的顺序?

标签 ios json

当我将JSON字符串读取为字典时,字典顺序与JSON字符串原始顺序不同。有没有人知道如何解决?也许有人会告诉我字典是乱的,但是我们的项目需要按照JSON字符串原始顺序对字典进行排序。

最佳答案

JSON 对象在 JSON 规范中定义为无序集合。

An object is an unordered set of name/value pairs. (http://json.org/)

以下是一些可能的解决方案:

  1. 将 JSON 对象更改为对象数组。如果您控制服务器,这是迄今为止最好的选择。如果顺序很重要,那么数组是正确的选择。
  2. 将订单与 JSON 一起发送。您可以将一个键数组也包含在 JSON 中。同样,您需要控制服务器才能执行此操作。
  3. 拿到 key 后对其进行分类。仅当您想要的顺序可以从键中导出时,这才有效。例如,如果按键是字母或数字。如果您控制键(即使您不控制整个服务器响应),您可以通过更改键以适合您的方式进行排序(例如从 [“stores”,“locations” 更改键)来破解此问题"] 到 ["0_stores","1_locations"]。如果您知道所有可能的键及其顺序,这也可以工作。
  4. 按 JSON 字典中的位置对键进行排序。如果 JSON 中的键保证不会显示在 JSON 中的任何其他位置(即 JSON 中没有任意文本字段),那么您可以通过查看它们的位置来排序所有字典键出现在 JSON 字符串中:

    NSArray* sortedKeys = [[dictionary allKeys] sortedArrayUsingComparator:^NSComparisonResult(NSString*  key1, NSString* key2) {
            NSInteger location1 = [jsonString rangeOfString:key1].location;
            NSInteger location2 = [jsonString rangeOfString:key2].location;
            return [@(location1) compare:@(location2)];
    }];
    
  5. 如果这些选项都不适合您,那么您将找到或创建自己的尊重顺序的 JSON 解析器。我认为很难找到这样的库,因为它明确违反了 JSON 规范。我不推荐这个选项。

关于ios - iOS开发读取JSON字符串时如何保持原来的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45319524/

相关文章:

ios - 如何创建 "Secret"之类的表格 View 动画?

javascript - Ajax Json 请求不工作

java - 更改属性的 Jackson Activity View

ios - 是否可以在 iPhone 中使用 AVAudioPlayer 更改音频播放速度?

ios - Flutter - 运行 pod install 出现问题 - `image_picker_modern`

json - 如何使用 POSTMAN 读取名称中带有句号的 JSON 对象?

java - 从 JSON 创建 XML

java - 将字符串日期转换为对象会产生无效的时区指示符 '0'

IOS:组织 UIButton 空间

ios - 国际化问题排查