NSStringsを指すキーと他のNSMutableDictionaryを指す2つのキーで構成されるNSMutableDictionaryからJSONドキュメントを生成しています。私の問題は、JSONドキュメントを出力すると、JSONドキュメントにNSMutableDictionaryに挿入したオブジェクトが異なる順序で含まれていることに気付くということです。たとえば、現在の出力は次のようになります。
JSON Output: {
"devicetype" : "iPhone Simulator",
"os" : "6.0",
"test_results" : [
{
"date" : "2012-12-25T20:38:09",
"name" : "Test 1",
"result" : "Fail"
},
{
"date" : "2012-12-25T20:38:11",
"name" : "Test 2",
"result" : "Pass"
},
{
"date" : "2012-12-25T20:38:13",
"name" : "Test 3",
"result" : "Pass"
},
{
"date" : "2012-12-25T20:38:19",
"name" : "Test 4",
"result" : "Fail"
}
],
"devicename" : "?????",
"reports" : [
],
"device_id" : "bb88413b178b4ef77830d385b9a4bd6d",
"platform" : "iPhone OS"
}
しかし、私は出力を次のようにしたいと思います。
JSON Output: {
"devicetype" : "iPhone Simulator",
"os" : "6.0",
"devicename" : "?????",
"device_id" : "bb88413b178b4ef77830d385b9a4bd6d",
"platform" : "iPhone OS"
"test_results" : [
{
"date" : "2012-12-25T20:38:09",
"name" : "Test 1",
"result" : "Fail"
},
{
"date" : "2012-12-25T20:38:11",
"name" : "Test 2",
"result" : "Pass"
},
{
"date" : "2012-12-25T20:38:13",
"name" : "Test 3",
"result" : "Pass"
},
{
"date" : "2012-12-25T20:38:19",
"name" : "Test 4",
"result" : "Fail"
}
],
"reports" : [
],
}
JSONドキュメントを作成するコードは次のようになります。
NSMutableArray* reports = [NSMutableArray array];
NSMutableArray* results = [NSMutableArray array];
for (TestResult *testObject in testResultArray) {
if ([[DataModel sharedInstance] getScore:testObject.score] == @"Not Tested") {
NSMutableDictionary *naTest = [NSMutableDictionary dictionary];
[naTest setObject:testObject.testName forKey:@"name"];
[naTest setObject:testObject.dateStamp forKey:@"date"];
[reports addObject:naTest];
}
else {
NSMutableDictionary *fullTest = [NSMutableDictionary dictionary];
NSString *score = [[DataModel sharedInstance] getScore:testObject.score];
[fullTest setObject:score forKey:@"result"];
[fullTest setObject:testObject.testName forKey:@"name"];
[fullTest setObject:testObject.dateStamp forKey:@"date"];
[results addObject:fullTest];
}
}
NSMutableDictionary *mainDoc = [NSMutableDictionary dictionary];
[mainDoc setObject:udid forKey:@"device_id"];
[mainDoc setObject:systemName forKey:@"platform"];
[mainDoc setObject:systemVersion forKey:@"os"];
[mainDoc setObject:@"?????" forKey:@"devicename"];
[mainDoc setObject:deviceType forKey:@"devicetype"];
[mainDoc setObject:results forKey:@"test_results"];
[mainDoc setObject:reports forKey:@"reports"];
NSError *ierror = nil;
NSData *jsnData = [NSJSONSerialization dataWithJSONObject:mainDoc options:NSJSONWritingPrettyPrinted error:&ierror];
NSString *jsnString = [[NSString alloc] initWithData:jsnData encoding:NSUTF8StringEncoding];
NSLog(@"JSON Output: %@", jsnString);
}
私の他の懸念は、test_resultsの出力も私が望む順序で出てこないことです。それらは「日付」、「名前」、「結果」の順序で出てきます。出力を「名前」、「日付」、「結果」にします。この注文も修正する方法はありますか?