如何使用嵌套的 NSDate 属性将 Realm 对象转换为 JSON?

2024-01-05

我有一个带有多个嵌套的嵌套 Realm 对象NSDate嵌套对象中的属性。我在用这个答案 https://stackoverflow.com/questions/32023249/how-can-i-convert-a-realm-object-to-json-in-swift将嵌套的 Realm 对象转换为NSDictionary,但我不知道如何转换它NSDictionary到实际的 JSON。

当我使用NSJSONSerialization.dataWithJSONObject(),我收到错误:'Invalid type in JSON write (__NSTaggedDate)'

据我了解,我必须首先转换NSDate属性到NSString。问题是我不知道如何进入深层嵌套的对象来做到这一点。

此代码生成'Invalid type in JSON write (__NSTaggedDate)' error:

    let exercises = realm.objects(ExerciseProgram).first

    let dic = exercises!.toDictionary()

    do {
        if let postData: NSData = try NSJSONSerialization.dataWithJSONObject(dic, options: NSJSONWritingOptions.PrettyPrinted) {
            let json = NSString(data: postData, encoding: NSUTF8StringEncoding)! as String
            print(json)
        }

    } catch let error as NSError {
        print(error)

我的对象的简化版本:

final class ExerciseProgram: Object {

    dynamic var name: String = ""
    dynamic var startDate = NSDate()
    dynamic var userProfile: User?
    var program = List<Exercise>()

}

final class Exercise: Object {

    dynamic var name = ""
    dynamic var notes: String?
    var workoutDiary = List<Workout>()
    dynamic var goal = 0

}

final class Workout: Object {

    dynamic var date = NSDate()
    var sets = List<WorkSet>()

}

使用 iOS 默认序列化程序的 JSON 序列化非常严格,并且大多数类型(包括NSDate) 不能直接序列化。

我查看了尤金在该问题中发布的很棒的代码示例(看起来实际上是从另一个原始问题派生的)。对象的深度似乎并不重要,因为这个扩展似乎被巧妙地设置为在较低级别上递归地调用自身。

就目前而言,它只是复制NSDate值直接添加到字典中,但是您可以轻松地将另一种情况添加到条件列表中以检测任何情况NSDate对象,并将它们转换为字符串。这将自动覆盖NSDate已经存在于字符串版本中的值:

extension Object {
func toDictionary() -> NSDictionary {
    let properties = self.objectSchema.properties.map { $0.name }
    let dictionary = self.dictionaryWithValuesForKeys(properties)

    let mutabledic = NSMutableDictionary()
    mutabledic.setValuesForKeysWithDictionary(dictionary)

    for prop in self.objectSchema.properties as [Property]! {
        // find lists
        if let nestedObject = self[prop.name] as? Object {
            mutabledic.setValue(nestedObject.toDictionary(), forKey: prop.name)
        } else if let nestedListObject = self[prop.name] as? ListBase {
            var objects = [AnyObject]()
            for index in 0..<nestedListObject._rlmArray.count  {
                let object = nestedListObject._rlmArray[index] as AnyObject
                objects.append(object.toDictionary())
            }
            mutabledic.setObject(objects, forKey: prop.name)
        }
        else if let dateObject = self[prop.name] as? NSDate {
            let dateString = ... ; //Perform the conversion you want here
            mutabledic.setValue(dateString, forKey: prop.name)
        }    
    }
    return mutabledic
}

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

如何使用嵌套的 NSDate 属性将 Realm 对象转换为 JSON? 的相关文章

  • 如何在 Swift Joint 中创建自定义链?

    我正在尝试创建一个LocationManager组合的包装 我有一个发布者和一些触发发布者的函数 但是 我想将它们与自定义命令组合在一起 这是我到目前为止得到的 available OSX 10 15 iOS 13 tvOS 13 watc
  • AUGraph 在 iOS 上是否已被弃用?如果是的话,什么时候?

    我听到过这样的传言AUGraph在 iOS 上已被弃用 例如这篇推特帖子 https twitter com marcoarment status 878323409339338753 marcoarment 您对 atpfm 关于需要重写
  • 如何通过 JSON / JS 在 Jenkins 中添加 CSRF 面包屑

    我想在 Jenkins 中通过 API 创建作业 但无法连接 Jenkins 中的 CSRF 保护课程 我得到了一个面包屑 但不知道如何将其附加到 JSON 或 JavaScript 中的 url 请求 以通过 POST 方法获取数据传递
  • React-Native 中的导航抽屉

    我是反应原生的新手 不介意我问一个基本问题 我想知道 实现抽屉式导航的分步过程是什么 推荐链接这个链接 https github com react native community react native side menu usage
  • 有没有相当于 mkmapsnapshotter 的 Google 地图?

    我有一个UITableView其中可能包含大量单元格 并且在某些单元格中我想要一个UIImageView显示一个位置的地图 其坐标仅在运行时已知 我希望表格视图能够平滑滚动 并且我希望单元格中的地图根本不可滚动 我被指示避开苹果地图 除了
  • uiscrollview 放大和缩小无法正常工作

    我有一个 uiscrollview 里面有一个 uiimageview 我希望用户能够放大图像 因为它是一个大图像 滚动视图只需要垂直滚动而不是水平滚动 在添加缩放效果之前 我有以下代码并且它按我想要的方式工作 void viewDidLo
  • 如何在 JsonNode 中创建插入新节点?

    我创建了一个新的 JsonNode JsonNode jNode new ObjectCodec createObjectNode 有了这个节点 我如何在其中添加键值对 以便我可以使用新值构造这个新节点 我读到的内容http www cow
  • 最小有效 JSON 是多少?

    我仔细阅读了 JSON 描述http json org http json org 但我不确定我是否知道这个简单问题的答案 最小可能的有效 JSON 字符串是什么 string 该字符串是有效的 JSON 吗 42简单的数字是有效的 JSO
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 如何将一个 SwiftUI View 作为变量传递给另一个 View 结构

    我正在实施一个very自定义 NavigationLink 称为MenuItem并希望在整个项目中重用它 它是一个符合以下条件的结构体View并实施var body some View其中包含一个NavigationLink 我需要以某种方
  • 将 Python 字典中的键替换为唯一值

    a 0 PtpMotion 1 PtpMotion 2 LinMotion 3 LinMotion 4 LinMotion 5 LinMotion 6 LinMotion 7 LinMotion 8 LinMotion 9 PtpMotio
  • 将 Python 列表(JSON 或其他)插入 MySQL 数据库

    所以我在Python中有一堆数组数据 嗯 相反 我有一个清单 我试图将此数组存储到 MySQL 数据库中的单个单元格中 我尝试使用 JSON 来序列化我的数据 但也许我不明白 JSON 是如何工作的 因此 在连接到我的数据库后 我尝试了上游
  • 如何处理 iPhone 6S Plus 字体大小?

    与其他屏幕尺寸相比 iPhone 6S Plus 的屏幕非常大 我似乎无法找到一种在不以编程方式调整大小的情况下处理标签字体大小的好方法 如何调整标签的字体大小 使其在 iPhone 5 上看起来更小 在 iPhone 6 Plus 上看起
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • TestFlight Beta 中的消息不可用

    I am seeing Unavailable message in TestFLight Beta App in iOS8 Please find the attached screenshot please tell me how to
  • Django Rest框架Json解析

    我想解析传入的POSTdjangoviews py 文件中的数据 发布数据 number 17386372 data banana apple grapes 这是我尝试读取上述传入数据的方法request views py class Fr
  • 获取在 iOS UIFont 中追踪字符的路径

    假设我在 iOS 应用程序中使用了自定义字体 Foo 我已将其添加到我的项目 plist 等中 并且我能够渲染UILabels之类的就很好了 现在 如果我想找出可以 追踪 该字体中的字母 P 的点序列 我将如何获得该点序列 例如 假设我想使
  • iOS 低内存崩溃,但内存使用率非常低

    这已经困扰我很长时间了 我的应用程序运行占用大约 2 74MB 内存 没关系 但当它创建 UIWebView 时 它会增加到大约 5 87MB 并继续崩溃 这些是在我的第一代 iPad 上运行时仪器中的实时字节下给出的值 我找不到崩溃日志
  • android中如何将字符串转换为unicode

    我正在解析一些unicodes from json to my android应用程序 API 给出unicodes像这样的图标 ue600 当我将这个unicode直接添加到textview like textview setText u
  • 将 MPMoviePlayerController 的视图添加到 UIView

    我想添加MPMoviePlayerController to a UIView 首先 我在 xib 文件中放置了一个视图 名为 youTubeView youtube播放器是MPMoviePlayerController youtubePl

随机推荐

  • 如何将图像转换为Buffer

    我想将图像 Mat 转换为缓冲区 console log image output Mat step 960 elemSize 3 sizes 160 320 empty 0 depth 0 dims 2 channels 3 type 1
  • openerp:ubuntu 上的内部服务器错误

    我刚刚在我的系统中安装了新的 OpenERP 8 0 替换了 Ubuntu 12 04 上现有的 OpenERP 7 0 我已经在家里的 Ubuntu 笔记本电脑上下载了这个 它运行得很好 并且想在我的办公室服务器上做同样的事情 我采取的步
  • STL 是否包含哈希表? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的哈希表 https stackoverflow com questions 133569 hashtable in c 有人可以提供一个简单的 C hash map 示例吗 https sta
  • 丢失的 ;在 for 循环初始化程序之后

    var nodeWordsString document getElementById nodeWordsTextArea value trim var nodeWordsStringArray nodeWordsString split
  • 在 mac el Capitan 上将 Brew 降级到之前版本 (opencv3/3.0.0)

    我在 mac 上并使用过brew安装opencv3 我有 opencv3 3 0 0 今天 我更新了它并获得了版本3 1 0 1 但是 此更新破坏了一切 当我尝试使用 VideoCapture 读取帧并使用 waitKey 函数时 它会因以
  • 如何从`MoyaError`获取错误状态代码?

    我正在使用一个Moya Moya ModelMapper and RxSwift执行网络请求 这是我的示例代码 let provider RxMoyaProvider
  • 如何使用 Realm 查询随机项目

    我只是好奇有没有办法从 Realm 查询随机项目 我需要从我的领域中获取 4 件随机物品 一件指定了 ID 的特定物品 Edit 我不知道 Realm 中有获取随机对象的方法 但您可以按照下面的描述进行操作 一种方法是查询所有对象 然后生成
  • 使用 C# 将光标移动到 MsWord 中文本的末尾?

    这个问题听起来可能很简单 但我无法找到任何解决方案 我想做的是将MsWord中的光标位置移动到文本末尾 我的代码如下 object StartPos 0 object Endpos 1 Microsoft Office Interop Wo
  • 如何使用 casperJS 等待 socket.io 连接返回数据?

    我正在抓取一个使用 socket io 填充一些选择标签选项的页面 在评估页面之前如何等待套接字接收数据 我在用casperJS http casperjs org 套接字代码 由目标站点加载 socket on list function
  • 导入错误:没有名为“Cython”的模块

    我正在尝试做from Cython Build import cythonize我收到消息ImportError No module named Cython 但是我用命令安装了Pythonpip install Cython 怎么了 Py
  • scapy 十六进制转储()

    我想知道哪个hexdump scapy 使用 因为我想修改它 但我根本找不到任何东西 我发现的是 def hexdump self lfilter None for i in range len self res p self elt2pk
  • Linux 上的 Java BlockingQueue 延迟较高

    我正在使用 BlockingQueue s 尝试 ArrayBlockingQueue 和 LinkedBlockingQueue 在我当前正在处理的应用程序中的不同线程之间传递对象 在此应用程序中 性能和延迟相对重要 因此我很好奇使用 B
  • 检查 JSON 和 XML 是否有效? C#

    我使用 newtonsoft json nethttp json codeplex com http json codeplex com 我想知道 如何验证 json 和 xml 是否有效 json xml 我如何验证这一点 您想要在服务器
  • 如何在双引号字符串中使用对象的属性?

    我有以下代码 DatabaseSettings NewDatabaseSetting select DatabaseName DataFile LogFile LiveBackupPath NewDatabaseSetting Databa
  • Qt中有进程内本地管道吗?

    Qt 有没有QIODevice适合的一对intra 处理点对点通信 人们可以使用混凝土QTCPSocket or QLocalSocket 但是服务器端连接API有点麻烦 而且强制数据通过OS似乎很浪费 以下是一个可用的基本实现 它使用内部
  • 将 UILabel 高度设置为 0

    是否可以通过编程方式设置 UILabel 的高度 我在 Xib 文件中添加了一系列约束 因此每个其他标签都依赖于其上方或下方的标签来定位 如果我可以使用 它会让我的生活变得更轻松 nameLabel height 0 我的 Xib 看起来像
  • 设置HttpClient的授权头

    我有一个用于 REST API 的 HttpClient 但是我在设置授权标头时遇到问题 我需要将标头设置为执行 OAuth 请求时收到的令牌 我看到一些 NET 代码表明以下内容 httpClient DefaultRequestHead
  • 如何使 COMReference 在 Azure CI/CD 管道中工作

    我在我的项目中使用了一个 dll 它被添加到我的项目文件中作为COMReference喜欢关注
  • 使用带有 $ 的逻辑向量对数据帧进行子集化

    我无法理解使用原因 and behavior of the 子集 a 中的符号data frame下面的例子是在我正在参加的初学者课程中提出的 不是现场教授 所以不能在那里询问 temp mat lt matrix 1 9 nrow 3 c
  • 如何使用嵌套的 NSDate 属性将 Realm 对象转换为 JSON?

    我有一个带有多个嵌套的嵌套 Realm 对象NSDate嵌套对象中的属性 我在用这个答案 https stackoverflow com questions 32023249 how can i convert a realm object