Ios 如何使用JSONModel映射有序NSDictionary

Ios 如何使用JSONModel映射有序NSDictionary,ios,objective-c,nsdictionary,unordered,jsonmodel,Ios,Objective C,Nsdictionary,Unordered,Jsonmodel,我有一个JSON,如下所示 odds: { 0501: { x: 2.75, description: "a" }, 0502: { x: 3.25, description: "b" }, 0513: { x: 3.5, description: "c" }, 0503: { x: 3.5, description: "d" }, 0505: { x: 7.5, description: "e" }, 0504: { x: 7.5, description: "f" }, 0512: { x:

我有一个JSON,如下所示

odds: {
0501: {
x: 2.75,
description: "a"
},
0502: {
x: 3.25,
description: "b"
},
0513: {
x: 3.5,
description: "c"
},
0503: {
x: 3.5,
description: "d"
},
0505: {
x: 7.5,
description: "e"
},
0504: {
x: 7.5,
description: "f"
},
0512: {
x: 10,
description: "g"
}
}
正如我想展示的,这个散列来自HTTP响应,但是我使用JSONModel来映射它,并且只有一种方法来映射这个NSDictionary。当将这个JSON映射到NSDictionary(正如您所猜测的)时,会出现无序的数据序列


那么,如何映射这个JSON,而不使用JSONModel和NSDictionary破坏它的序列呢?

NSDictionary
本身就是无序的:


如果要保留键值项的顺序,则需要使用非
NSDictionary
的数据结构。任何通过
NSDictionary
传递数据的库都无法保留顺序。

在这种情况下,我所做的一件事是在字典之外,在单独的数组中对字典键进行排序。使用有序键数组确定如何显示字典值。

字典无法排序,但由于JSON似乎是一个对象数组,请使用for…in遍历生成的NSDictionary,并将元素添加到可变数组中


然后,通过比较x值,使用.sortInPlace对结果数组进行排序。

当您将此json转换为NSDictionary时会发生什么?因为没有有序的
NSDictionary
,json字典中的键顺序也不相关,你为什么在这里担心顺序?x值的顺序很重要,我应该照原样展示它们。“x值的顺序很重要”,那么原始的JSON是错误的。这应该是一组字典。因为它不是,所以您必须将它转换为一个字典数组。“This”JSON不是JSON。我无法对字典键进行排序,因为没有正确的方法。json中有x个值,应该对它们进行排序。如果我按x值的赔率顺序对键进行排序,则顺序可能会改变。您可能需要将数据转换为另一种格式。遍历这些值并将json转换成一个具有x值和描述的对象,然后将其放入数组并对x值进行排序。我想使用NSHashTable,但JSONModel无法将该对象映射到该值。我需要像javaHashMap一样的数据结构,Java中的Hashmap也不是保序的。(然而LinkedHashMap是。)如果JSONModel返回一个NSDictionary,那么订单已经被销毁。您需要使用不同的库来获取订单。