我正在尝试创建对象的 JSON 数组,以便在以后操作并保存在UserPreferences中,例如:
try
{
IDisposable thing = WebApp.Start(myURI);
...
}
catch (SomeSortOfException)
{
}
catch (AnotherTypeOfException)
{
}
这是我的NSObject类:
[
{
"id" : "01",
"title" : "Title"
},
{
"id" : "02",
"title": "Title 02"
}
]
而且我有这段代码可以使用 SwiftyJson 转换为JSON,但是我不能像数组一样
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
}
}
}
此代码仅返回数组的最后一项:
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
}
答案 0 :(得分:0)
问题就在这里,因为循环迭代您正在同一对象中设置值。
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)]")
答案 1 :(得分:0)
我建议类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"
}
]
*/