【问题标题】:How to retain order of JSON data retrieved with AFNetworking?如何保留使用 AFNetworking 检索的 JSON 数据的顺序?
【发布时间】:2013-04-11 11:00:38
【问题描述】:

我正在使用AFNetworking 从 Web 服务中检索 JSON 数据。我得到的部分响应字符串是:

{"DATA":{"LEASE TYPE":"3 Yrs + 0 renew of 0 Yrs","LANDLORD":"","TENANT":"test comp"... 

等等。 “DATA”字典(“LEASE TYPE”、“LANDLORD”、“TENANT”...)中键值的顺序对于演示目的很重要。但是,当AFNetworking 调用NSJSONSerialization's 时:

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

方法,返回的字典的键顺序不同。

我注意到AFJSONRequestOperation 对象将服务器的响应存储为NSString,并且所有内容都按正确的顺序排列。但是,如果可以避免的话,我并不热衷于手动解析 JSON。

任何人都可以提出一种方法,让我得到/保持钥匙的原始顺序吗?

谢谢。

【问题讨论】:

    标签: ios json afnetworking


    【解决方案1】:

    当您创建 NSDictionary 时,顺序将不同。我经常认识到字典是按键名字母顺序排列的。

    但是在使用字典时,顺序并不重要。他们不应该!

    【讨论】:

    • 我当然明白原则上应该这样做。但是在这种情况下,原始顺序很重要。我的问题不是关于什么是正确的行为,而是关于(重新)捕获从服务器返回的数据的原始顺序的最佳方法。
    • 据我所知,字典不能被订购,他们也不会保持他们的订单。我认为实现这一点的唯一方法是使用两个数组。然后您可以使用[values objectAtIndex:[keys indexOfObject:@"myKey"]] 获取值
    【解决方案2】:

    如果顺序很重要,请使用数组而不是字典,字典本质上是无序的。或者按所需顺序添加一个字典键数组。

    如果您无法控制发送的响应,则至少必须自己解析 JSON 以进行排序。

    【讨论】:

    • 我认为你是对的 - 我基本上无法控制将文本转换为字典的过程,因此第二次解析 JSON 实际上是我唯一的选择。谢谢。
    【解决方案3】:

    正如前面的答案提到的,字典本质上是没有顺序的,但你可以在这里找到一个很好的 OrderedDictionary 类:

    http://www.cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html

    http://projectswithlove.com/projects/OrderedDictionary.zip

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      相关资源
      最近更新 更多