GVKun编程网logo

如何在Swift中将Realm对象转换为JSON?(swift realm)

25

本文将为您提供关于如何在Swift中将Realm对象转换为JSON?的详细介绍,我们还将为您解释swiftrealm的相关知识,同时,我们还将为您提供关于android–如何在RealmforJava

本文将为您提供关于如何在Swift中将Realm对象转换为JSON?的详细介绍,我们还将为您解释swift realm的相关知识,同时,我们还将为您提供关于android – 如何在Realm for Java中将RealmObject序列化为JSON?、ios – 在Swift中将JSON转换为模型值、jquery – 如何将ResultSet对象转换为JSON格式输出、swift2 – 如何将Realm对象移动到全局范围的实用信息。

本文目录一览:

如何在Swift中将Realm对象转换为JSON?(swift realm)

如何在Swift中将Realm对象转换为JSON?(swift realm)

我声明了两个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转换?

答案1

小编典典

设法在这里找到答案:

我可以在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}}

android – 如何在Realm for Java中将RealmObject序列化为JSON?

android – 如何在Realm for Java中将RealmObject序列化为JSON?

我正在为我的应用程序实现一个数据库,我正在尝试将它“连接”到我的REST接口.数据以 JSON和新的 JSON支持(从Realm 0.76开始)我可以在我的Realm.createObjectFromJson(MyType.class,jsonString)中抛出JSON,并创建适当的obejcts和RealmLists.

但我怎么能这样做呢?也就是说,使用RealmObject并将其序列化为JSON?它还应该序列化该对象内的任何RealmList.

解决方法

来自英国的基督徒在这里.
Realm for Android目前没有任何此类方法,虽然核心数据库实际上支持JSON序列化,所以现在你要么必须手动操作,要么使用像GSON这样的第三方工具(警告,我没有测试过这种情况)然而).

ios – 在Swift中将JSON转换为模型值

ios – 在Swift中将JSON转换为模型值

在我寻求更多关于 Swift的知识的过程中,我正在寻找改进我的应用程序的方法,并注意到我正在做出假设的一些地方,也许我不应该这样做.

在创建一个新对象时,让我们说一个’学生’,他们需要诸如名字(String),年龄(Int)和得分(Float)之类的东西.我从JSON文件中读取这些内容,并将它们放入如下对象中:

// note,details is a [String:Any] type
let name = details["name"] as! String
let age = details["age"] as! Int 
let score = Float(details["score"])
self.student = Student(name: name,tutor_group: tutor_group,score: score)

所以我的问题如下;
1.我应该如何修改我的代码以检查如果某个值不是数字,应该在哪里,变量只是零,甚至更好0?
2.如果词典中的键不存在怎么办?
3.有不同的方法,如果是这样,哪种方法最佳?

请注意,我希望保持此代码尽可能短 – 如果每行的if / else语句不是我正在寻找的.

非常感谢你提前!

解决方法

Swift团队建议的解决方案

最近Apple described提出了解决这个问题的方法.

您可以通过这种方式定义Student结构(或类)

struct Student {

    let name: String
    let age: Int
    let score: Float

    init?(json: [String:Any]) {
        guard
            let name = json["name"] as? String,let age = json["age"] as? Int,let score = json["score"] as? Float
            else { return nil }
        self.name = name
        self.age = age
        self.score = score
    }
}

这种方法的好处

>您封装逻辑以将JSON转换为Student结构本身内的Student
>如果JSON不包含有效数据(例如,没有具有有效Int的年龄字段),则初始化程序失败并返回nil.这意味着没有办法创建一个缺少字段的学生(这是一件好事),这种情况不会导致崩溃.

更多

我上面链接的帖子还描述了一种更高级的方法,其中缺少字段/值会引发异常.但是,如果您不需要记录(或通知调用方)为什么初始化失败,则不需要此操作.

jquery – 如何将ResultSet对象转换为JSON格式输出

jquery – 如何将ResultSet对象转换为JSON格式输出

触发查询后我有一个ResultSet.请告诉我如何将其转换为JSP中的 JSON输出.

在第二阶段,我们假设我们有一个JSON输出,就像在这个链接> http://inknpost.com/eshopping/json.jsp

$.getJSON();正在访问上述文件;在另一个文件中.

请告诉我如何在页面的不同行中显示“名称”和“部门”.

解决方法

创建一个可重用的Javabean类,它表示一行,一个实体.
public class Category {
    private Long id;
    private String name;
    private String department;

    // Add/generate getters/setters/c'tors/equals/hashcode and other boilerplate.
}

创建一个可重用的DAO类,它以通常的JDBC方式将ResultSet映射到这些Javabeans的集合.

public class CategoryDAO {
    private static final String sql_LIST = "SELECT id,name,department FROM category";
    // ...

    public List<Category> list() throws sqlException {
        List<Category> categories = new ArrayList<Category>();

        try (
            Connection connection = database.getConnection();
            PreparedStatement statement = connection.prepareStatement(sql_LIST);
            ResultSet resultSet = statement.executeQuery();
        ) {
            while (resultSet.next()) {
                Category category = new Category();
                category.setId(resultSet.getLong("id"));
                category.setName(resultSet.getString("name"));
                category.setDepartment(resultSet.getString("department"));
                categories.add(category);
            }
        }

        return categories;
    }

    // ...
}

创建一个servlet类,它使用JSON序列化器/反序列化器,它能够在Javabeans的arbirary集合和JSON字符串之间进行转换,例如Google Gson.

@WebServlet("/categories.json")
public class CategoriesJsonServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws servletexception,IOException {
        try {
            List<Category> categories = categoryDAO.list();
            String categoriesJson = new Gson().toJson(categories);
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(categoriesJson);
        } catch (sqlException e) {
            throw new servletexception("DB error",e);
        }
    }

}

通过http:// localhost:8080 / contextname / categories.json调用它.不,没有涉及JSP.您不应该将JSP用于HTML以外的输出格式.

最后,在jQuery中,只需访问它通常的$.getJSON()方式.

$('#somebutton').click(function() {
    $.getJSON('categories.json',function(categoriesJson) {
        var $table = $('<table>').appendTo($('#somediv'));
        $.each(categoriesJson,function(index,category) {
            $('<tr>').appendTo($table)
                .append($('<td>').text(category.id))
                .append($('<td>').text(category.name))
                .append($('<td>').text(category.department));
        });
    });
});

swift2 – 如何将Realm对象移动到全局范围

swift2 – 如何将Realm对象移动到全局范围

我正在使用 Swift2和Realm构建一个应用程序来保存数据.数据关系可以描述为父对子对孙子对象.每个对象都有自己的子类,使用相同的格式编写.我得到运行时错误“RLMObject子类不能嵌套在其他声明中.请将_TtCC12 …移动到全局范围.”在孙子对象上.有什么建议?

解决方法

错误消息告诉您,RealmSwift.Object子类的声明必须位于最外层,并且不能嵌套在其他类或结构声明或函数定义中.

我们今天的关于如何在Swift中将Realm对象转换为JSON?swift realm的分享就到这里,谢谢您的阅读,如果想了解更多关于android – 如何在Realm for Java中将RealmObject序列化为JSON?、ios – 在Swift中将JSON转换为模型值、jquery – 如何将ResultSet对象转换为JSON格式输出、swift2 – 如何将Realm对象移动到全局范围的相关信息,可以在本站进行搜索。

本文标签: