【问题标题】:Convert swift3 list to json将 swift3 列表转换为 json
【发布时间】:2018-06-22 15:36:03
【问题描述】:

我正在寻找一种转换 Swift3 List 的方法

var myList = [MyObject]();

到 json。

我用过:

let jsonData = try JSONSerialization.data(withJSONObject: myList, options: JSONSerialization.WritingOptions()) as NSData

应用程序崩溃了。

【问题讨论】:

  • 您实际上想做什么,问题尚不清楚。首先阅读this 并编辑您的问题。
  • 您无法使用JSONSerialization 序列化自定义对象。您必须将它们转换为符合 JSON 的类型(字典/字典数组)。在 Swift 3 中不要使用 NSDataJSONSerialization.WritingOptions()。使用Data 并省略options 参数。结构和类应该以大写字母开头。
  • swift 中的 json 仅适用于字典或数组?因为在 java 和 c# 中,您可以将列表发送到 json 序列化程序,它将创建一个 json 字符串

标签: ios json swift3


【解决方案1】:

您可以序列化一个数组/列表,问题是自定义MyObject,您必须先将其映射到字典。

我会使用.map 方法:

var myList = [MyObject]() // myList contains MyObject's
let jsonArray = myList.map { obj in
  return obj.serialize()
}

比在MyObject 中添加一个序列化函数,如下所示:

public func serialize() -> Dictionary<String, Any> {
  var dict = Dictionary<String, Any>()

  // now place all your public vars in the dictionary
  dict["id"] = self.id
  dict["name"] = self.name
  dict["title"] = self.title

  return dict
}

现在如果你想反序列化,只需创建另一个方法:

public func deserialize(source: Dictionary<String, Any>) {
  // You might need some type conversion
  self.id = source["id"]
  self.name = source["name"]
  self.title = source["title"]
}

然后再次调用 map,现在从 DictionaryMyObject

var jsonArray = [Dictionary<String, Any>]() // jsonArray contains dictionaries
let myList = jsonArray.map { dict in
  let obj = MyObject()
  obj.deserialize(source: dict)

  return obj
}

【讨论】:

  • 谢谢,请问我现在如何使用 MyObject 将 json 反序列化为数组?
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2016-10-06
  • 1970-01-01
相关资源
最近更新 更多