Создайте документ JSON из NSObject с помощью SwiftyJSON - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать массив объектов 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
    }
  }

}

И у меня есть этот код для преобразования в JSON с использованием SwiftyJson , но я не могу сделать это как массив

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"
}

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я бы предположил, что класс Item принимает Codable протокол.Тогда сделайте работу JSONEncoder.Таким образом, вы можете даже вкладывать полученный JSON в более сложный тип.Также проверьте этот , как настроить имена ключей.

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"
  }
]
*/
0 голосов
/ 12 декабря 2018

Проблема заключается здесь, поскольку цикл повторяется, вы устанавливаете значения в одном и том же объекте.

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)]")
...