在iOS中排序JSON对象

时间:2014-08-19 17:32:40

标签: ios json

“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”进行排序。排序不是“浅”RGB和“暗”RGB。

我们如何对JSON对象进行排序?请帮帮我。

我可以对“R”,“G”,“B”进行排序。但物体“红色”,“绿色”,“蓝色”的顺序不正确。

NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"R" ascending:YES];
NSArray * sortDescriptor = [NSArray arrayWithObject:brandDescriptor];

输出

Red        12
Green      105
Blue       255

您可以看到我按“R”排序,值按排序顺序排列,但颜色值“红色,绿色,蓝色”不按顺序排列。

提前致谢。

1 个答案:

答案 0 :(得分:0)

其他人在评论中说的是正确的,但从我在你的问题中看到的你不需要真正排序。如果我理解正确,您只是想在JSON中的“红色”,“绿色”和“蓝色”词典中获取“R”的值。一种方法是:

// grab json object here, which in your case returns a dictionary 
NSDictionary *json = [NSJSONSerialization
                          JSONObjectWithData:data // where data is simply your json above, for example
                          options:kNilOptions
                          error:&error];
NSDictionary *colors = [json valueForKey:@"Colors"]; // gives you a handle on the whole json blob of Colors
NSLog(@"R: %@", [[colors valueForKey:@"Red"] valueForKey:@"R"]); // this gets the R value for Red
NSLog(@"G: %@", [[colors valueForKey:@"Green"] valueForKey:@"R"]); // this gets the R value for Green
NSLog(@"B: %@" [[colors valueForKey:@"Blue" valueForKey:@"R"]); // this gets the R value for Blue

这有帮助吗?

(另外,你可能需要为R值使用更好的格式说明符,具体取决于它们的返回方式。如果整数使用%d,如果float / double使用%f)