Swift 4 Playground - получение объекта / результата из JSON

Я использую Swift 4 на игровых площадках (MacOS), тестирую свой код как новичок ... Я хотел бы получить объект / результат title из удаленного JSON.

Код работает до точки print (object.title), которая, как я надеялся, вернет значение первого заголовка в импортированном JSON.



    import Foundation
    import PlaygroundSupport

    PlaygroundPage.current.needsIndefiniteExecution = true

    // Create structer of Post
    struct Post: Codable {
        var userId: Int
        var title: String
        var body: String
    }

    // Remote JSON to Structed Object
    let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!
    let jsonData = try! Data(contentsOf: url)
    let datastring = String(data: jsonData, encoding: .utf8)
    let decoder = JSONDecoder()

    do {
        // Decode data to object
        let object = try decoder.decode(Post.self, from: jsonData)
        print(object.title) 
    }
    catch {
        // Error Catch
        //print(error)
    }

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
0
1 019
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Пожалуйста (научитесь) читать JSON. Корневой объект - это массив (представленный []), поэтому вам нужно декодировать [Post] и цикл для печати всех элементов:

let object = try decoder.decode([Post].self, from: jsonData)
for post in object {
    print(post.title) 
}

и никогда, никогда, никогда не игнорируйте ошибки

} catch {
  print(error)
}

Привет, Вадиан, Спасибо за быстрый ответ .... Добавление вашего кода приводит к следующей ошибке: Выполнение игровой площадки завершилось неудачно: ошибка: MyPlayground.playground: 16: 14: ошибка: тип «Сообщение» не соответствует протоколу «Последовательность» 'для пользователя в объекте {^

user7890002 23.03.2018 13:23

Спасибо, ошибка была закомментирована только во время тестирования ... Но да, она будет обрабатывать ошибки .... Но у меня все еще есть ошибка .....

user7890002 23.03.2018 13:26

Еще раз, вы должны декодировать [Post], а не Post. Обратите внимание на скобки.

vadian 23.03.2018 13:27

Аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааπала ценой, вы, звезда, не видели скобок ..... Это работает, большое спасибо, Vadian

user7890002 23.03.2018 13:31

Также обратите внимание на все возможности Swift4. Я имею в виду кодирование, декодирование и сериализацию в Swift 4. Итак, вы можете поиграть с этим. Я добавил код для Playground:

import Foundation
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

typealias JSONModel = [JSONModelElement]

class JSONModelElement: Codable {
    let userID, id: Int?
    let title, body: String?

    enum CodingKeys: String, CodingKey {
        case userID = "userId"
        case id, title, body
    }
}

let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!
let jsonData = try! Data(contentsOf: url)

if let jsonModel = try? JSONDecoder().decode(JSONModel.self, from: jsonData) {
    for element in jsonModel {
        print(element.title)
    }
}

Удачного кодирования!

Спасибо, Вадим - Ваш пример кода отлично смотрится, поиграю :)

user7890002 23.03.2018 16:01

Другие вопросы по теме