Использование JSON Decodable в Swift 4.1 - PullRequest
0 голосов
/ 13 ноября 2018
{  
    "count":30,
    "recipes":[  
        {  
            "publisher":"Closet Cooking",
            "f2f_url":"http://food2fork.com/view/35382",
            "title":"Jalapeno Popper Grilled Cheese Sandwich",
            "source_url":"http://www.closetcooking.com/2011/04/jalapeno-popper-grilled-cheese-sandwich.html",
            "recipe_id":"35382",
            "image_url":"http://static.food2fork.com/Jalapeno2BPopper2BGrilled2BCheese2BSandwich2B12B500fd186186.jpg",
            "social_rank":100.0,
            "publisher_url":"http://closetcooking.com"
        }
    ]
}

Как я могу проанализировать этот JSON с помощью Swift 4.1 Decodable, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Ваш предыдущий вопрос довольно близок, но вы должны добавить структуру для корневого объекта

Объявлять элементы структуры как необязательные в максимально возможной степени.URL-адреса могут быть декодированы как URL

struct Root : Decodable {
    let count : Int 
    let recipes : [Recipe]
}

struct Recipe : Decodable { // It's highly recommended to declare Recipe in singular form
    let recipeId : String
    let imageUrl, sourceUrl, f2fUrl : URL
    let title : String
    let publisher : String
    let socialRank : Double
    let page : Int?
    let ingredients : [String]?
}

Теперь декодировать

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let result = try decoder.decode(Root.self, from: data)
self.recipes = result.recipes
0 голосов
/ 13 ноября 2018

ниже приведены модели для вашего JSON:

struct Recipe: Codable{
    let publisher: String
    let f2f_url: String
    let title: String
    let source_url: String
    let recipe_id: String
    let image_url: String
    let social_rank: Float
    let publisher_url: String
}


struct  Model: Codable {
    let count: Int
    let recipes: [Recipe]
}

и ниже - в JSON-формате:

let json = """
{
    "count":30,
    "recipes":[
        {
            "publisher":"Closet Cooking",
            "f2f_url":"http://food2fork.com/view/35382",
            "title":"Jalapeno Popper Grilled Cheese Sandwich",
            "source_url":"http://www.closetcooking.com/2011/04/jalapeno-popper-grilled-cheese-sandwich.html",
            "recipe_id":"35382",
            "image_url":"http://static.food2fork.com/Jalapeno2BPopper2BGrilled2BCheese2BSandwich2B12B500fd186186.jpg",
            "social_rank":100.0,
            "publisher_url":"http://closetcooking.com"
        }
    ]
}
""".data(using: .utf8)!

let decoder = JSONDecoder()

do {
   let model = try decoder.decode(Model.self, from: json) //Decode JSON Response Data
   print(model)
} catch let parsingError {
   print("Error", parsingError)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...