在Swift 4.0中使用JSONDecoder解码数据键的特定值

时间:2019-07-04 09:00:43

标签: ios json swift

我有这种数据。但我尚未将其序列化为JSON

{ 
  "status":"ok",
  "totalResults":5899,
  "articles":[{//some key value pairs},
              {//some key value pairs}
   ]
}

我想使用可解码协议解析文章数组。

如果我只有articles数组,我知道该怎么做,但是在上述情况下,我如何首先找到商品的数据,然后使用JSONDecodable将其解析为模型。

2 个答案:

答案 0 :(得分:3)

首先声明这些类型的结构。

struct Root : Decodable {
    let status : String
    let totalResults : Int
    let articles : [Article]
}

struct Article : Decodable {
    {//some key value pairs},
    {//some key value pairs}
}

假设 json 字符串为 jsonStr 。 现在,将此json转换为data

let data = Data(jsonStr.utf8)

现在尝试解码此数据。

let decodedStruct = fromJSON(data)

这是fromJSON()方法的定义

static func fromJSON(jsonData: Data) -> Root? {
     let jsonDecoder = JSONDecoder()
     do {
          let root = try jsonDecoder.decode(Root.self, from: jsonData)
          return root
     } catch {
          return nil
     }
}

答案 1 :(得分:2)

字典变成结构,字典数组变成结构数组

struct Root : Decodable {
    let status : String
    let totalResults : Int
    let articles : [Article]
}

struct Article : Decodable {
    let aKey : AType
    let anotherKey : AnotherType
}