使用SwiftyJSON从NSObject创建JSON文档

时间:2018-12-12 17:48:43

标签: json swift swifty-json

我正在尝试创建对象的 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
}

2 个答案:

答案 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"
  }
]
*/