使用 SwiftyJSON 从 NSObject 创建一个 JSON 文档
Create a JSON document from NSObject with SwiftyJSON
我正在尝试创建一个 JSON 对象数组,然后在 UserPreferences 中进行操作和保存,如下所示:
[
{
"id" : "01",
"title" : "Title"
},
{
"id" : "02",
"title": "Title 02"
}
]
这是我的 NSObject class:
class Item: NSObject {
var _id: String = ""
var _title: String = ""
var id: String {
get {
return _id
}
set {
_id = newValue
}
}
var title: String {
get {
return _title
}
set {
_title = newValue
}
}
}
而且我有这段代码可以使用 SwiftyJson 转换为 JSON,但我无法将它变成一个数组
var item: [Item] = ["array of itens already setted"]
var json: JSON = JSON([:])
for item in list {
json["id"].string = item.id
json["title"].string = item.title
}
此代码 return 只是数组的最后一项:
{
"id" : "01",
"title" : "Title"
}
问题出在这里,因为循环迭代您在同一个对象中设置值。
var item: [Item] = ["array of itens already setted"]
var json: [JSON] = [JSON([:])]. -----> this should be array not just object
for item in list {
json["id"].string = item.id
json["title"].string = item.title
}
改用这个:
var item: [Item] = ["array of itens already setted"]
var json: [JSON] = [JSON([:])]. -----> json array
for item in list {
let jsonTemp: JSON = JSON([:])
jsonTemp["id"].string = item.id
jsonTemp["title"].string = item.title
json.append(jsonTemp)
}
print("[JSON OBJECT Count :: \(json.count), Informations are : \(json)]")
我建议 class Item
采用 Codable
协议。
然后让 JSONEncoder
完成这项工作。这样,您甚至可以将生成的 JSON 嵌套在更复杂的类型中。
另请查看 this 以了解如何自定义键名。
let items = [Item(), Item()]
items[0].id = "01"
items[0].title = "Title"
items[1].id = "02"
items[1].title = "Title 02"
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data: try encoder.encode(items), encoding: .ascii)!)
/* result
[
{
"_id" : "01",
"_title" : "Title"
},
{
"_id" : "02",
"_title" : "Title 02"
}
]
*/
我正在尝试创建一个 JSON 对象数组,然后在 UserPreferences 中进行操作和保存,如下所示:
[
{
"id" : "01",
"title" : "Title"
},
{
"id" : "02",
"title": "Title 02"
}
]
这是我的 NSObject class:
class Item: NSObject {
var _id: String = ""
var _title: String = ""
var id: String {
get {
return _id
}
set {
_id = newValue
}
}
var title: String {
get {
return _title
}
set {
_title = newValue
}
}
}
而且我有这段代码可以使用 SwiftyJson 转换为 JSON,但我无法将它变成一个数组
var item: [Item] = ["array of itens already setted"]
var json: JSON = JSON([:])
for item in list {
json["id"].string = item.id
json["title"].string = item.title
}
此代码 return 只是数组的最后一项:
{
"id" : "01",
"title" : "Title"
}
问题出在这里,因为循环迭代您在同一个对象中设置值。
var item: [Item] = ["array of itens already setted"]
var json: [JSON] = [JSON([:])]. -----> this should be array not just object
for item in list {
json["id"].string = item.id
json["title"].string = item.title
}
改用这个:
var item: [Item] = ["array of itens already setted"]
var json: [JSON] = [JSON([:])]. -----> json array
for item in list {
let jsonTemp: JSON = JSON([:])
jsonTemp["id"].string = item.id
jsonTemp["title"].string = item.title
json.append(jsonTemp)
}
print("[JSON OBJECT Count :: \(json.count), Informations are : \(json)]")
我建议 class Item
采用 Codable
协议。
然后让 JSONEncoder
完成这项工作。这样,您甚至可以将生成的 JSON 嵌套在更复杂的类型中。
另请查看 this 以了解如何自定义键名。
let items = [Item(), Item()]
items[0].id = "01"
items[0].title = "Title"
items[1].id = "02"
items[1].title = "Title 02"
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data: try encoder.encode(items), encoding: .ascii)!)
/* result
[
{
"_id" : "01",
"_title" : "Title"
},
{
"_id" : "02",
"_title" : "Title 02"
}
]
*/