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

2024-04-14

我正在从 NSMutableDictionary 生成一个 JSON 文档,该文档由指向 NSStrings 的键以及两个依次指向其他 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 中。

有大量关于 NSDictionary 固有的缺乏“顺序”的信息。

这个SO问题提供了许多有用的解决方案,例如使用具有有序字典类的外部库,以及使用SortDescriptors:Objective-C字典是一个有序的容器吗? https://stackoverflow.com/questions/1648059/is-the-objective-c-dictionary-an-ordered-container

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • UITextView:内存使用量巨大

    我在 UITextView 中遇到了内存使用过多的问题 我正在将 50Kb ascii 文本文件加载到 NSString 中 并将其分配给应用程序中空 UITextView 组件的 text 属性 这立即使我的内存占用量增加了 100Mb
  • 断点条件错误

    我已经根据条件设置了断点 event name isEqualToString Some Name 这很好用 但是 当我尝试添加另一个带有条件的断点时 part name isEqualToString Some Value With A
  • 由于 2.23 导致 iOS 应用程序被拒绝 - iOS 数据存储指南

    以下是 Apple 关于拒绝的消息 2 23 应用程序必须遵循 iOS 数据存储指南 否则将被拒绝 2 23 详情 在启动和内容下载时 您的应用程序会存储 6 5 MB 这并不意味着 遵守 iOS 数据存储指南 下一步 请验证只有用户使用您
  • Xcode 在代码签名身份中看不到我的开发人员证书

    我续订了 IOS 开发人员证书 从钥匙串中删除了旧证书 然后单击了我的证书 钥匙串中的一切看起来都很正常 我有分发 开发人员 WWDC 证书 每个配置文件看起来都有效 并带有绿色标记 在组织器中的团队和配置文件部分下 但在代码签名身份下的
  • 进入后台时 Alamofire 请求卡住?

    我正在使用 Alamofire 调用 Web 服务 该服务需要相当长的时间才能加载 如果应用程序进入后台 当我返回应用程序时 我会被加载程序卡住 我想这是因为调用永远不会向我的完成处理程序返回任何内容 我该如何解决这个问题 您可以使用后台抓
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • 从 json 数组获取值并执行 sql 插入

    这是我的数组 json 1 Device ID a9a3346be4375a92 Date 2012 05 31 Time 15 22 59 Latitude 51 4972912 Longitude 0 1108178 2 Device
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • IDFA 使用不当,您的应用不遵守 ios 中的限制广告跟踪设置

    I have checked the iTC settings I have uploaded the same app 2 days ago and it works fine but when today I uploaded the
  • SceneKit unproject Z 文档解释?

    我正在经历一些 SceneKit 概念 而我试图在脑海中巩固的一个概念是 unprojectPoint 我知道该函数将获取 2D 中的一个点并返回 3D 中的一个点 因此具有正确的 Z 值 当我阅读文档时 我读到了以下内容 method u
  • 与新 Apple Music 应用程序中相同的动态状态栏

    是否可以动态着色statusBar这是在新的苹果音乐应用程序 Edit iOS 8 4 中的新 Apple Music 应用程序具有此功能 打开应用程序 选择并播放歌曲 状态栏为白色 向下滑动播放器控制器以查看 我的音乐 控制器 它有黑色状
  • Apple Developer 应用程序门户不再可以生成新的 Bundle Seed ID

    iOS 开发者门户中的新界面不再为您的应用程序 ID 提供 生成新的 按钮 取而代之的是 使用团队 ID 这将导致使用相同的种子 ID 任何人都知道为什么要进行更改以及您应该如何使用新的捆绑包种子 ID 随意补一些 不再可能生成新的种子 I
  • 是否可以使用UIPageControl来控制UITableView的移动?

    从Apple示例 PageControl 中我们可以知道UIPageControl可以用来控制scrollview中页面的移动 由于 UITableView 是 UIScrollView 的子类 我想使用 UIPageControl 来控制
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 如何在 iOS 上固定证书的公钥

    在提高我们正在开发的 iOS 应用程序的安全性时 我们发现需要对服务器的 SSL 证书 全部或部分 进行 PIN 操作以防止中间人攻击 尽管有多种方法可以做到这一点 但当您搜索此内容时 我只找到了固定整个证书的示例 这种做法会带来一个问题
  • 子类 PFObject 上的 PFUser 属性

    我使用以下类 动态属性以及 m 文件中的 load 和 parseClassName 方法 对 PFObject 进行了子类化 interface DAOpponents PFObject
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一
  • 下载进度条在 iOS 企业发行版中没有改变进度

    我正在通过企业分发开发和分发 iPad 应用程序 它们下载并执行良好 因此一切正常 Web 链接 ipa 文件 plist 文件 配置 问题 是 当用户单击链接进行下载时 iPad 中显示下载进度的进度条显示 正在等待 但却是空的并且永远不
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且

随机推荐

  • Laravel 中的渴望加载约束过滤器问题

    我无法过滤内容groups表关于username in users表使用急切负载约束 http laravel com docs 4 2 eloquent eager loading public function username ret
  • Jenkins CLI 连接被拒绝

    执行时 java jar jenkins cli jar s https jenkins url help 由于某种原因我的连接被拒绝 Jenkins版本是1580 3 用户拥有Jenkins服务器的权限 cli jar是最新的并且ssh公
  • SQL INNER JOINing 2 子查询

    我试图将这两个子查询 我认为这就是它的名字 内部联接在一起 其中第一个查询的branchName等于第二个查询的branchName 然而 他们似乎并不想联合起来 而且以我有限的 SQL 知识 我似乎找不到解决这个问题的方法 我尝试将括号移
  • Tegra 平板电脑上的 NDK 调试

    今天 我购买了用于本机开发的 Android 平板电脑 采用 Tegra 的 Acer Iconina Tab A500 Honeycomb 3 1 然后我从以下位置下载并安装了 Tegra Android Development Pack
  • Google Cloud Text To Speech API 快速入门示例

    我是这个论坛的新手 我正在尝试让 Google Cloud TTS API 正常工作 但遇到了一些问题 页面是 https cloud google com text to speech docs quickstart protocol h
  • SolrCloud:无法创建集合、锁定问题

    我一直在尝试实现 SolrCloud 一切正常 直到我尝试创建包含 6 个分片的集合 我的设置如下 5 个虚拟服务器 全部运行 Ubuntu 14 04 由一家公司跨不同数据中心托管 为整体运行 ZooKeeper 3 4 6 的 3 台服
  • C# 清除ListView中的所有项目

    我尝试清除列表视图 但清除方法不起作用 myListView Items Clear 这是行不通的 当我在这一行放置断点时 该行将被执行 但我的列表视图不为空 怎么会 我通过将列表视图的数据源设置为数据表来填充列表视图 我现在的解决方案是将
  • 如何在 Symfony4 中将用户添加到 Sentry 以应对所有异常?

    我将 Sentry 添加到我的项目中 但它不会添加某些事件的当前登录用户 我添加了一个事件订阅者 但我不确定我是否真的需要它 对于像 ArgumentCountError 这样的例外情况 一切正常 对于 NotFoundHttpExcept
  • 构建上周、本周和下周的日期数组

    我经常被 Python 中日期的问题绊倒 在我的网络应用程序中 我想显示日历三周的每一天 上周 本周和下周 星期一表示一周的开始 我目前处理这个问题的方法是向后退一步直到星期一 然后再减去 7 天 然后添加 20 天来构建三周范围 但这感觉
  • SwiftUI 中的重复工具栏

    我将工具栏添加到 2 个文本字段 但工具栏显示了两次 这是我的自定义文本字段的代码 public struct SUIDecimalField View public var body some View TextField placeho
  • 在 Google Cloud 中设置网站? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我完全迷失在这之中 我习惯于使用带有 cpanel 的简单 Web 主机来制作网站 只需使用 filezilla 登录并上传我的 ht
  • 如何在 MAC OS X 中获得最大 TCP 接收/发送窗口?

    如何在 MAC OS X 中获得最大 TCP 接收 发送窗口 Linux中有两个ctl proc sys net core rmem max 最大 TCP 接收窗口 NET CORE RMEM MAX proc sys net core w
  • 如何在Android应用程序中读取xlsx文件?

    我知道 stackoverflow 上有很多相同的问题 但似乎我看不到任何可能的解决方案来读取 xlsx 的内容 我尝试过的 我尝试将整个 Apache POI 库放入 Android 应用程序中 并尝试读取 xlsx 文件 然而 问题是
  • Authlogic 中会话模型的自定义验证消息

    在 Authlogic 的会话模型中覆盖登录 密码验证消息的最佳方法是什么 在用户模型中 Authlogic 提供了 merge 方法来覆盖验证选项 但 Session 没有类似的东西 有什么建议么 Authlogic有它自己的国际化等级
  • 覆盖嵌套控件中的隐式样式

    我的应用程序中有一个资源字典 其中它们是为 textblock 定义的通用样式 该字典与 app xaml 合并 现在我有一个要求 我需要在对话框窗口中更改 tabitem 的样式并基于几个触发器设置前景 我已经定义了自己的文本块样式并为
  • Foo f = Foo(); // 没有匹配的函数来调用 'Foo::Foo(Foo)' ... 嗯?

    class Foo public explicit Foo explicit Foo Foo Foo d Foo 错误 没有匹配的函数可用于调用 Foo Foo Foo 我尝试改变Foo Foo to Foo Foo 正如错误所示 据我所知
  • 用于将长 IPv6 地址转换为其压缩形式的 Java 库 [重复]

    这个问题在这里已经有答案了 我想知道是否有一个库可以用来将长 IPv6 地址 例如 2002 9876 57AB 0000 0000 0000 0000 0001 的表示形式转换为压缩的 IPv6 形式 以本例 2002 9876 57AB
  • 现代 Android 中的后台处理

    我已经实现了一些后台任务并使用这个Guide https developer android com guide background 有一次我需要使用协程工作者 https developer android com topic libr
  • 如何使用可分页Spring数据JPA选择不同的值?

    我想在我的表中使用分页进行不同的选择 但它声称存在此错误 有谁知道如何解决它 Error org postgresql util PSQLException ERROR for SELECT DISTINCT ORDER BY expres
  • 需要生成的 JSON 文档与 iOS 中 NSMutableDictionary 中插入的对象的顺序相同

    我正在从 NSMutableDictionary 生成一个 JSON 文档 该文档由指向 NSStrings 的键以及两个依次指向其他 NSMutableDictionary 的键组成 我的问题是 当我输出 JSON 文档时 我注意到 JS