Я использую 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)
}

Пожалуйста (научитесь) читать JSON. Корневой объект - это массив (представленный []), поэтому вам нужно декодировать [Post] и цикл для печати всех элементов:
let object = try decoder.decode([Post].self, from: jsonData)
for post in object {
print(post.title)
}
и никогда, никогда, никогда не игнорируйте ошибки
} catch {
print(error)
}
Спасибо, ошибка была закомментирована только во время тестирования ... Но да, она будет обрабатывать ошибки .... Но у меня все еще есть ошибка .....
Еще раз, вы должны декодировать [Post], а не Post. Обратите внимание на скобки.
Аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааπала ценой, вы, звезда, не видели скобок ..... Это работает, большое спасибо, Vadian
Также обратите внимание на все возможности 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)
}
}
Удачного кодирования!
Спасибо, Вадим - Ваш пример кода отлично смотрится, поиграю :)
Привет, Вадиан, Спасибо за быстрый ответ .... Добавление вашего кода приводит к следующей ошибке: Выполнение игровой площадки завершилось неудачно: ошибка: MyPlayground.playground: 16: 14: ошибка: тип «Сообщение» не соответствует протоколу «Последовательность» 'для пользователя в объекте {^