当我将JSON字符串读取为字典时,字典顺序与JSON字符串原始顺序不同。有没有人知道如何解决?也许有人会告诉我字典是乱的,但是我们的项目需要按照JSON字符串原始顺序对字典进行排序。
最佳答案
JSON 对象在 JSON 规范中定义为无序集合。
An object is an unordered set of name/value pairs. (http://json.org/)
以下是一些可能的解决方案:
- 将 JSON 对象更改为对象数组。如果您控制服务器,这是迄今为止最好的选择。如果顺序很重要,那么数组是正确的选择。
- 将订单与 JSON 一起发送。您可以将一个键数组也包含在 JSON 中。同样,您需要控制服务器才能执行此操作。
- 拿到 key 后对其进行分类。仅当您想要的顺序可以从键中导出时,这才有效。例如,如果按键是字母或数字。如果您控制键(即使您不控制整个服务器响应),您可以通过更改键以适合您的方式进行排序(例如从 [“stores”,“locations” 更改键)来破解此问题"] 到 ["0_stores","1_locations"]。如果您知道所有可能的键及其顺序,这也可以工作。
按 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)]; }];
如果这些选项都不适合您,那么您将找到或创建自己的尊重顺序的 JSON 解析器。我认为很难找到这样的库,因为它明确违反了 JSON 规范。我不推荐这个选项。
关于ios - iOS开发读取JSON字符串时如何保持原来的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45319524/