Декодирование вложенных элементов JSON (SwiftUI) - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь разобрать приведенные ниже данные JSON в показанные структуры. У меня чертовски много времени пытается выяснить, как добраться до «вложенных» элементов, таких как элементы «title:», «content:» и «excerpt:». Всякий раз, когда код запускается, он разбивается при разборе вложенных элементов.

Я смотрел на материал для разработчиков Apple и проверял игровую площадку здесь: https://developer.apple.com/documentation/foundation/archives_and_serialization/using_json_with_custom_types

Я также пытался использовать quicktype.ioоднако для создания моделей данных из образца JSON в заголовке экспортируемого файла из quicktype есть строка: «let blogItem = try? newJSONDecoder (). decode (BlogItem.self, from: jsonData)», однакоЯ получаю сообщение об ошибке компиляции, что jsonData не распознается, и я не могу найти ссылку на него.

struct BlogSection: Codable, Identifiable {
    var id: Int
    var slug: String
    var link: String
    var title: [BlogTitle]
    var content: [ContentData]
}

struct BlogTitle:  Codable, Equatable, Identifiable {
    var id: UUID
    var rendered: String
}

struct ContentData: Codable, Identifiable{
    var id: UUID
    var rendered: String

}

/**************** JSON Data ***************/
[
{
"id": 10960,
"date": "2019-10-02T01:00:07",
"date_gmt": "2019-10-02T05:00:07",
"guid": {
"rendered": "example.com/blog-template-copy-copy/"
},
"modified": "2019-09-20T07:08:41",
"modified_gmt": "2019-09-20T11:08:41",
"slug": "relationships-matter",
"status": "publish",
"type": "post",
"link": "example.com/relationships-matter/",
"title": {
"rendered": "Relationships Matter"
},
"content": {
"rendered": "<h1>Page content</h1>",
"protected": false
},
"excerpt": {
"rendered": "<p>By: Joe Schmoe<br />\nFirst Author",
"protected": false
},
"author": 57,
"featured_media": 10958,
"comment_status": "open",
"ping_status": "open",
"sticky": false,
"template": "",
"format": "standard",
"meta": [],
"categories": [
613
],
"tags": [],
"_links": {
"self": [
{
"href": "example.com/wp-json/wp/v2/posts/10960"
}
],
"collection": [
{
"href": "example.com/wp-json/wp/v2/posts"
}
],
"about": [
{
"href": "example.com/wp-json/wp/v2/types/post"
}
],
"author": [
{
"embeddable": true,
"href": "example.com/wp-json/wp/v2/users/57"
}
],
"replies": [
{
"embeddable": true,
"href": "example.com/wp-json/wp/v2/comments?post=10960"
}
],
"version-history": [
{
"count": 5,
"href": "example.com/wp-json/wp/v2/posts/10960/revisions"
}
],
"predecessor-version": [
{
"id": 10971,
"href": "example.com/wp-json/wp/v2/posts/10960/revisions/10971"
}
],
"wp:featuredmedia": [
{
"embeddable": true,
"href": "example.com/wp-json/wp/v2/media/10958"
}
],
"wp:attachment": [
{
"href": "example.com/wp-json/wp/v2/media?parent=10960"
}
],
"wp:term": [
{
"taxonomy": "category",
"embeddable": true,
"href": "example.com/wp-json/wp/v2/categories?post=10960"
},
{
"taxonomy": "post_tag",
"embeddable": true,
"href": "example.com/wp-json/wp/v2/tags?post=10960"
}
],
"curies": [
{
"name": "wp",
"href": "https://api.w.org/{rel}",
"templated": true
}
]
}
}
]

'

1 Ответ

0 голосов
/ 16 октября 2019

Заголовок и содержимое не являются массивами в предоставленном json, поэтому должны быть объявлены как объекты. Ваш BlogTitle и ContentData объявлены как «Идентифицируемые» и имеют переменную для идентификатора, но оба не имеют идентификатора в предоставленном json, поэтому из-за этого вы получите ошибку декодирования.

Ошибка, которой вы являетесьполучить очки для совершенно другой проблемы, хотя. Как объявляется ваша jsonData?

...