在Swift 4中使用{“ Name”:String,“ Value”:String}结构解析数组

时间:2019-04-12 10:51:16

标签: arrays swift parsing codable swift-structs

我需要在Swift中解析与此类似的数据结构(基于JSON):

[
  {
   "Name": "uniquename",
   "Value": "John"
  }, 
  {
   "Name": "locale",
   "Value": "UK"
  }, 
]

我将此节点存储在struct

struct Rowset : Decodable {
  var row: LoggedUserSession

  init(loggedUser: [LoggedUserSession]){
    self.row = loggedUser[0]
  }

  enum CodingKeys: String, CodingKey{
    case row = "Row"
  }
}

我为需要从数组中提取的所有数据准备了类似的struct,但我不知道如何迭代该过程,并在名称字符串与我的大小写匹配时返回该值。

struct LoggedUserSession : Decodable {
  var username: String;
  var locale: String;


  init(username: String, locale: String) {
    // In JS I would embedd an iterator here and return the values 
    self.username = username
    self.locale = locale
  }

  enum CodingKeys: String, CodingKey {
    case username = "uniquename"
    case locale = "locale"
  }
}

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的意思,则希望将LoggedUserSession个JSON数组解析为一个LoggedUserSession s的快速数组。如果是这样,那么您就快到了。

为完整起见,我将按以下方式解释您发布的JSON,以使其有效:

{"loggedUserSessions":
  [
    {
     "uniquename": "John",
     "locale": "UK"
    }
  ]
}

您的LoggedUserSession对象已正确实现,所以现在您需要的只是数组解析部分。您可以使用以下结构进行操作:

struct SessionList: Decodable {

  let sessions: [LoggedUserSession]

}

使用JSONDecoder进行调用并使用您的JSON数据应将您的列表序列化为可通过SessionList的{​​{1}}属性访问的数组。