gpt4 book ai didi

ios - 需要生成的 JSON 文档与 iOS 中 NSMutableDictionary 中插入的对象的顺序相同

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:37 24 4
gpt4 key购买 nike

我正在从 NSMutableDictionary 生成一个 JSON 文档,该文档由指向 NSString 的键以及两个依次指向其他 NSMutableDictionary 的键组成。我的问题是,当我输出 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 的输出也没有按照我希望的顺序出现。它们按“日期”、“姓名”、“结果”的顺序出现,我希望输出为“姓名”、“日期”、“结果”。有什么方法可以让我也更正此订单吗?

最佳答案

NSDictionary 不提供有序的存储容器——您或许应该首先研究如何呈现数据,即直接查询字典键以便对 NSDictionary 进行排序,以及将字典对象加载到 NSArray(s) 中。

关于 NSDictionary 固有的“顺序”缺失,有大量可用信息。

这个 SO 问题提供了许多有用的解决方案,例如使用具有有序字典类的外部库,以及使用 SortDescriptors: Is the Objective-C dictionary an ordered container?

关于ios - 需要生成的 JSON 文档与 iOS 中 NSMutableDictionary 中插入的对象的顺序相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com