【发布时间】:2014-08-19 17:32:39
【问题描述】:
“Colors” : {
“Red : {
“R” : 255,
“G” : 100,
“B” : 190,
“Light” : {
“R” : 195,
“G” : 420,
“B” : 255,
},
“Dark” : {
“R” : 36.3458,
“G” : 125.047,
“B” : 49.4638,
}
},
“Green” : {
“R” : 12,
“G” : 232,
“B” : 150,
“Light” : {
“R” : 195,
“G” : 420,
“B” : 255,
},
“Dark” : {
“R” : 36.3458,
“G” : 125.047,
“B” : 49.4638,
}
},
“Blue” : {
“R” : 105,
“G” : 200,
“B” : 150,
“Light” : {
“R” : 195,
“G” : 420,
“B” : 255,
},
“Dark” : {
“R” : 36.3458,
“G” : 125.047,
“B” : 49.4638,
}
},
}
我想在 iOS 中按“R”、“G”、“B”排序。排序不是“Light” RGB 和“Dark” RGB。
我们如何对 JSON 对象进行排序?请帮帮我。
我可以对“R”、“G”、“B”进行排序。但对象“红色”、“绿色”、“蓝色”的顺序不正确。
NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"R" ascending:YES];
NSArray * sortDescriptor = [NSArray arrayWithObject:brandDescriptor];
输出
红12 绿色105 蓝色 255您可以看到我按“R”排序,值按排序顺序排列,但颜色值“红、绿、蓝”不按顺序排列。
提前致谢。
【问题讨论】:
-
您不对 JSON 对象进行排序。但是如果将 JSON 数据加载到数组中,则可以对数组进行排序。
-
@rmaddy 没错。 @user3908542 您的 json 对象中没有任何数组。只有数组是
ordered collections,你有的是字典,字典是unordered collections,所以你不能对它们进行排序。正如 rmaddy 所说,您必须将它们存储在一个数组中才能对它们进行排序。 -
@maddy 和@HAS:你们都错了。
NSDictionary只是 JSON 对象的表示。而这种容器恰好是一个 unordered 关联容器,JSON 对象可以很好地表示为std::map,它是一个 ordered 关联容器,因此可以根据其Compare函数进行排序。 JSON 本身只是“排序”没有意义的文本。但是我们可以对它的表示进行排序,即使是一个 JSON 对象,如果这是一个排序的关联容器。 -
我解决了这个问题。现在我遇到了另一个与此相关的问题。我遇到错误“此类与键
的键值编码不兼容”我在对象名称中有空格,在对象名称中没有空格的情况下它工作得很好,但是如果对象名称有空格,那么它给了我错误。示例:对象名称“BrandName”然后工作,对象名称“品牌名称”,开始给我错误“这个类不符合键品牌名称的键值编码。” -
首先,访问 json.org 并学习 JSON 语法,至少要足够好,以免在复制/粘贴示例时省略关键字符。