json - 从 json swift 创建一个结构或对象数组

标签 json swift struct

我有一个包含供应商列表的 JSON。什么是最好和最有效的方式来保存它作为在类中易于访问并且可以通过项目的实例。我正在考虑使用 struct,因为我以前没有使用过它们。它比使用 Object 更好吗?

下面是我的结构。

struct Vendor {
let name: String
let latitude: Double
let longitude: Double

init(dictionary: [String: Any]) {
    self.name = dictionary["name"] as? String ?? ""
    self.latitude = dictionary["Lat"] as? Double ?? 0.0
    self.longitude = dictionary["Lng"] as? Double ?? 0.0
}
init?(data: Data) {
    guard let json = (try? JSONSerialization.jsonObject(with: data)) as? [String: Any] else { return nil }
    self.init(dictionary: json)
}
init?(json: String) {
    self.init(data: Data(json.utf8))
}

我的问题是如何从这种结构类型的 JSON 创建数组。

谢谢

最佳答案

是的,使用struct 是封装数据的好方法。只要 struct 准确地为您的 JSON 建模,您就可以轻松地转换为 JSON 或转换为 JSON。

如果您的struct符合Codable,那么编码和解码成JSON就相当简单了:

import Foundation

// Conform to Codable
struct Vendor: Codable {
  let name: String
  let latitude: Double
  let longitude: Double
}

// create Array
var vendors = [Vendor]()
for i in 1...3 {
  let vendor = Vendor(name: "Foo", latitude: Double(i), longitude: 20.0)
  vendors.append(vendor)
}

// encode the Array into a JSON string
// convert to Data, then convert to String
if let jsonData = try? JSONEncoder().encode(vendors),
  let jsonString = String(data: jsonData, encoding: .utf8) {
  print(jsonString)

  // [{"name":"Foo","longitude":20,"latitude":1},{"name":"Foo","longitude":20,"latitude":2},{"name":"Foo","longitude":20,"latitude":3}]

  // decode the JSON string back into an Array
  // convert to Data, then convert to [Vendor]
  if let vendorData = jsonString.data(using: .utf8),
    let vendorArray = try? JSONDecoder().decode([Vendor].self, from: vendorData) {
    print(vendorArray)

    // [__lldb_expr_8.Vendor(name: "Foo", latitude: 1.0, longitude: 20.0), __lldb_expr_8.Vendor(name: "Foo", latitude: 2.0, longitude: 20.0), __lldb_expr_8.Vendor(name: "Foo", latitude: 3.0, longitude: 20.0)]
  }
}

关于json - 从 json swift 创建一个结构或对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46594404/

相关文章:

java - Java中如何正确读取JSON数据?

javascript - 获取意外 token : n when parsing JSON in JavaScript

ios - 没有响应或跳过完成 block AlamofireImage

c - 将值分配给结构指针内部的结构指针数组中的索引

java: json 上的 xpath

javascript - 计算javascript对象数组中重复项的平均值

ios - 使用简单的初始化在测试中创建 CoreData 对象

swift - 在新的 swift 2.0 中获取 NSData 语句错误

c - 如何将结构传递给函数

C 程序 - 结构指针