Расшифровка вложенного JSON с помощью Swift 4 - PullRequest
0 голосов
/ 03 июня 2018

JSON =

{
"html_attributions": [],
"results": [
               {
                  "geometry": {},
                   "name": "Cruise Bar, Restaurant & Events",
                   "vicinity": "Circular Quay W, Sydney"
                },
                {}
],
"status": "OK"
}

Как получить имя, если оно вложено в результаты?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Вы можете сделать это так:

Модель:

 import Foundation
struct HtmlInitial: Codable {
    let results: [Result]?
    let status: String

    enum CodingKeys: String, CodingKey {
        case results, status
    }
}

struct Result: Codable {
    let name, vicinity: String?
}

extension HtmlInitial {
    init(data: Data) throws {
        self = try JSONDecoder().decode(HtmlInitial.self, from: data)
    }
}

использовать модель Вот так:

let url = Bundle.main.url(forResource: "APIResponse", withExtension: "json")!

if  let data = try? Data.init(contentsOf: url) ,
    let initial = try? HtmlInitial.init(data: data),
    let result = initial.results?[0] {
    print(result.name)
}
0 голосов
/ 03 июня 2018

Сэм Попробуй это, я напишу пример кода на детской площадке, используя твой Джсон. root.results предоставит вам массив словарей, вы можете легко пройти и получить из него желаемое имя.

import UIKit

struct Root: Codable {
    let results: [Results]?

    private enum CodingKeys: String, CodingKey {
    case results = "results"
   }

}

struct Results: Codable {
   let name: String?
   let vicinity: String?
}

let url = Bundle.main.url(forResource: "data", withExtension: "json")
let data = NSData(contentsOf: url!)


do {
      let root = try JSONDecoder().decode(Root.self, from: data as! Data)

      if let name = root.results?.first?.name {
          print(name)
      }    

} catch let error as NSError {

    print(error.description)
}

Вот json, который я использовал.

{
"results": [{
            "name": "Cruise Bar, Restaurant & Events",
            "vicinity": "Circular Quay W, Sydney"
            }]
}
...