当前位置: 首页 > 面试题库 >

如何在Swift中将Realm对象转换为JSON?

孟璞
2023-03-14
问题内容

我声明了两个Realm表:

class Task: Object {
    dynamic var taskID: String = ""
    let taskAssignedTo = List<Contacts>()
}

class Contacts: Object {
    dynamic var contactEmail: String = ""
    dynamic var contactName: String = ""
}

最终目标是将Task Realm对象转换为JSON。我在想的方法是:

使用类中的方法将对象转换为字典

func taskToDictionary() -> [String: AnyObject] {
    return [
        "taskID" : self.taskID,
        "taskAssignedTo" : self.taskAssignedTo._rlmArray.count //Not sure how to get the array
    ]
}

使用SwiftyJSON将结果字典转换为JSON

let taskObject = Task()
let newTaskJSON = JSON(taskObject.taskToDictionary())

现在,这可以转换,但是:

  1. 有一个更好的方法吗?
  2. 如何将RLMArray转换为数组以进行JSON转换?

问题答案:

设法在这里找到答案:

我可以在Realm forSwift中将RealmObject序列化为JSON或NSDictionary吗?

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

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

    for prop in self.objectSchema.properties as [Property]! {
        // find lists
        if let objectClassName = prop.objectClassName  {
            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  {
                    if let object = nestedListObject._rlmArray[index] as? Object {
                        objects.append(object.toDictionary())
                    }
                }
                mutabledic.setObject(objects, forKey: prop.name)
            }
        }
    }
    return mutabledic
}
}

Xcode 7和Swift 2的更新:

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)
        }

    }
    return mutabledic
}

}

更新到Xcode 8和Swift 3:

extension Object {
func toDictionary() -> NSDictionary {
    let properties = self.objectSchema.properties.map { $0.name }
    let dictionary = self.dictionaryWithValues(forKeys: properties)
    let mutabledic = NSMutableDictionary()
    mutabledic.setValuesForKeys(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 as NSCopying)
        }
    }
    return mutabledic
}
}


 类似资料:
  • 问题内容: 这个下课 需要转换为 我尝试将对象手动传递给将变量设置为字典并返回字典的函数。但是,我希望有一种更好的方法来实现这一目标。 问题答案: 在Swift 4中,您可以从类型继承。

  • 如何将hashmap转换或强制转换为Java中的JSON对象,并再次将JSON对象转换为JSON字符串?

  • 问题内容: 如何将java对象转换为InputStream? 问题答案: 您可以使用ObjectOutputStream 您将对象(以下代码中的obj)写入ObjectOutputStream,要转换为输入流的对象必须实现Serializable。

  • 问题内容: 如何在Java中将对象转换为int? 问题答案: 如果您确定该对象是: 或者,从Java 7开始,您可以等效地编写: 当心,它可以抛出一个,如果你的对象是不是和你要的对象是。 这样,您就假定对象是一个整数(包装的int),然后将其拆箱为一个int。 是基元,因此不能将其存储为,唯一的方法是将考虑/装箱为,然后存储为。 如果您的对象是,则可以使用方法将其转换为简单的int: 如果您的对象

  • 我有一个字符串(jsonData)通过Jackson对象映射器映射到json,如下所示,映射到JaxB。 我能够很好地映射到上面的字符串。然而,我在映射到jooq JSON对象时遇到了问题。我想我现在必须将jsonData转换为jooq JSON。 我该怎么做? 或者我必须创建某种包装? 由jooq配置的DTO

  • 问题内容: 我想从服务器中获取JSON数据并在启动时对其进行操作。在Objective- C中,我使用此代码转换为,因为获取的数据有时可能包含null。 但是,在Swift中,可以将转换为吗?我想使用以下操作(代码是Objective-C的): 在上面的代码中,当获取的数据的键为时,则对象的属性设置为。 我使用Xcode 6 Beta 6。 问题答案: 这可能是您要寻找的: