使用SwiftyJSON从NSObject创建JSON文档

问题描述 投票:-1回答:2

我正在尝试创建一个JSON对象数组,以便在之后操作和保存UserPreferences,如下所示:

[
  {
    "id" : "01",
    "title" : "Title"
  },
  {
    "id" : "02",
    "title": "Title 02"
  }
]

这是我的NSObject类:

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
}

此代码只返回数组的最后一项:

{
  "id" : "01",
  "title" : "Title"
}
json swift swifty-json
2个回答
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)]")

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"
  }
]
*/
© www.soinside.com 2019 - 2024. All rights reserved.