Codableを使用してSwift4で複雑なJSONを解析する方法

twizted_klaun

サーバーからJSONを解析するのに助けが必要です。JSONは次のとおりです。

{
"response": {
    "items": [
        {
            "type": "post",
            "source_id": -17507435,
            "date": 1514538602,
            "post_id": 4105,
            "post_type": "post",
            "text": "Some text here",
            "marked_as_ads": 0,
            "attachments": [
                {
                    "type": "photo",
                    "photo": {
                        "id": 456239655,
                        "album_id": -7,
                        "owner_id": -17507435,
                        "user_id": 100,
                        "photo_75": "https://sun1-3.userapi.com/c840632/v840632924/3b7e7/4YUS7DlaLK8.jpg",
                        "photo_130": "https://sun1-3.userapi.com/c840632/v840632924/3b7e8/Ffpb4ZUlulI.jpg",
                        "photo_604": "https://sun1-3.userapi.com/c840632/v840632924/3b7e9/-pkl6Qdb9hk.jpg",
                        "width": 439,
                        "height": 312,
                        "text": "",
                        "date": 1514538602,
                        "post_id": 4105,
                        "access_key": "6a61a49570efd9c39c"
                    }
                }
            ],
            "post_source": {
                "type": "api"
            },
            "comments": {
                "count": 0,
                "groups_can_post": true,
                "can_post": 1
            },
            "likes": {
                "count": 0,
                "user_likes": 0,
                "can_like": 1,
                "can_publish": 1
            },
            "reposts": {
                "count": 0,
                "user_reposted": 0
            },
            "views": {
                "count": 2
            }
        }
    ],
    "profiles": [],
    "groups": [
        {
            "id": 17507435,
            "name": "Literature Museum",
            "screen_name": "samlitmus",
            "is_closed": 0,
            "type": "group",
            "is_admin": 0,
            "is_member": 1,
            "photo_50": "https://pp.userapi.com/c615722/v615722068/e58c/d5Y8E_5689s.jpg",
            "photo_100": "https://pp.userapi.com/c615722/v615722068/e58b/Hm05ga3x2J8.jpg",
            "photo_200": "https://pp.userapi.com/c615722/v615722068/e589/yoG_DDalFII.jpg"
        },
        {
            "id": 27711883,
            "name": "E:\\music\\melodic hardcore",
            "screen_name": "e_melodic_hc",
            "is_closed": 0,
            "type": "page",
            "is_admin": 0,
            "is_member": 1,
            "photo_50": "https://pp.userapi.com/c628220/v628220426/47092/xepNnC7pSBw.jpg",
            "photo_100": "https://pp.userapi.com/c628220/v628220426/47091/uAokr-c3NQ8.jpg",
            "photo_200": "https://pp.userapi.com/c628220/v628220426/4708f/eNY4vzooz4E.jpg"
        },
        {
            "id": 81574241,
            "name": "DOS4GW.EXE",
            "screen_name": "dos4gw",
            "is_closed": 0,
            "type": "page",
            "is_admin": 0,
            "is_member": 1,
            "photo_50": "https://pp.userapi.com/c622118/v622118651/e045/vlhV6QxtoLI.jpg",
            "photo_100": "https://pp.userapi.com/c622118/v622118651/e044/P9mVUhXBV58.jpg",
            "photo_200": "https://pp.userapi.com/c622118/v622118651/e043/Soq8oxCMB0I.jpg"
        },
        {
            "id": 76709587,
            "name": "Prosvet",
            "screen_name": "prosvet_pub",
            "is_closed": 0,
            "type": "page",
            "is_admin": 0,
            "is_member": 0,
            "photo_50": "https://pp.userapi.com/c630431/v630431500/b24a/GHox8AmDTXU.jpg",
            "photo_100": "https://pp.userapi.com/c630431/v630431500/b249/H3mcC-K7htM.jpg",
            "photo_200": "https://pp.userapi.com/c630431/v630431500/b248/9fyvB8gkcwc.jpg"
        }
    ],
    "next_from": "1/4105_1514494800_5"
}

}

このJSONから取得する必要があるのは、「テキスト」、「コメント」、「いいね」、「再投稿」、「添付ファイル」の行です。

「添付ファイル」フィールド内に「photo_604」行を取得したいと思います。

これが私のコードです:

class NewsItems: Decodable {
    var text: String?
    var comments: Comments
    var likes: Likes
    var reposts: Reposts
    var attachments: [Attachments]
}

class Comments: Decodable {
    var count: Int?
}

class Likes: Decodable {
    var count: Int?
}

class Reposts: Decodable {
    var count: Int?
}

class Attachments: Decodable {
    var attachments: AttachmentPhoto
}

class AttachmentPhoto: Decodable {
    var photo: WhatIsInsideAttachmentsPhoto
}

class WhatIsInsideAttachmentsPhoto: Decodable {
    var photo: String?

    enum CodingKeys: String, CodingKey {
        case photo = "photo_604"
    }
}


class WhatIsIsideResponseNewsFeed: Decodable {
    var items: [NewsItems]
}

public class ResponseNewsFeed: Decodable {
    var response: WhatIsIsideResponseNewsFeed
}

しかし、リクエストを行った後:

Alamofire.request(baseURL+methodName, parameters: parameters).responseData(completionHandler: { response in
        if let result = response.result.value {
            let decoder = JSONDecoder()
            let myResponse = try! decoder.decode(ResponseNewsFeed.self, from: result)
            completion(myResponse.response.items)

エラーが発生します:

致命的なエラー:「試してみてください!」式で予期せずエラーが発生しました:Swift.DecodingError.keyNotFound(_UL_PetrovLeonid.NewsItems。(CodingKeys in _FA9A2FC8130449AA328C19ACD9506C2D).attachments、Swift.DecodingError.Context(Fe8D ______________________ CodingKeys in _FA9A2FC8130449AA328C19ACD9506C2D).items、Foundation。(_ JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0"、intValue:Optional(0))]、debugDescription: "キー添付ファイル(\"添付ファイル\ ")に関連付けられた値はありません。"基礎となるエラー:nil))

なぜそれが起こっているのですか、それを解決するために何をする必要がありますか?コーディングを始めてまだ3か月ですので、問題がおかしいと思われる場合は、事前にご容赦ください。

ありがとうございました。

ヴァディアン

エラーメッセージは非常に明確です

... Swift.DecodingError。keyNotFound ... NewsItems。(_ FA9A2FC8130449AA328C19ACD9506C2DのCodingKeys)。添付ファイル...キー添付ファイル(「添付ファイル」)に関連付けられた値はありません

  • keyNotFoundはキーがありません
  • NewsItem。(CodingKeys ...).attachmentsキーのオブジェクトであるattachmentsですNewsItemsAttachments
  • キーの添付ファイル(「添付ファイル」)に関連付けられている値はありません

間もなく:真のattachmentsAttachmentsありません

JSONを見てください

      "attachments": [
            {
                "type": "photo",
                "photo": {

同等のクラスは

class Attachments: Decodable {
    let type : String
    let photo : AttachmentPhoto
}

そしてAttachmentPhoto

class AttachmentPhoto: Decodable {

    private enum CodingKeys : String, CodingKey {
        case photo604 = "photo_604"
        case id
    }

    let id : Int
    let photo604 : String // or even URL
    // etc.
}

実際にはclassesを使用する必要はなく、ほとんどの場合astructで十分です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

swift4の少し複雑なjsonからデータを解析して取得する方法は?

分類Dev

swift4を使用してJSONを解析する方法

分類Dev

SwiftでCodableを使用してJSONを解析する

分類Dev

SwiftでCodableを使用してJSON応答を解析する

分類Dev

複雑でネストされたデータを使用したSwift4でのJSON解析

分類Dev

Go非整列化を使用して複雑なJSONを解析する方法は?

分類Dev

gsonまたはjacksonを使用して複雑なjsonを解析する方法

分類Dev

Swift Codable:辞書を使用してJSONを解析しますか?複数の異なるエントリ?

分類Dev

Swift4でFetchedResultsControllerを使用してDateSectionTitlesを取得する方法

分類Dev

UnityでC#を使用して複雑なJSONオブジェクトを解析する方法

分類Dev

変数をキーとしてjsonを解析するSwift4

分類Dev

Alamofireを使用してSwift4でYoutubeAPIを解析します

分類Dev

Swift4 / 5を使用して複数のクラスを拡張する方法

分類Dev

Goで複雑なJSONを解析する

分類Dev

Pythonで複雑なJSONを解析する

分類Dev

Codableを使用してSwiftで辞書の配列を解析する

分類Dev

Swift4を使用したJSON解析

分類Dev

swift4でUIImagePickerControllerを使用する方法

分類Dev

Codableを使用して一般的な応答を解析する方法

分類Dev

TypeScriptを使用して複雑なjsonオブジェクトを解析する

分類Dev

JavaScriptとRegExを使用して複雑なBibTexアイテムを解析する方法

分類Dev

動的キーを使用してSwift4でネストされたJSONからデータを抽出する方法

分類Dev

Codableを使用したSwift4デコードjson

分類Dev

JavaでGSONを使用して複雑なJsonオブジェクトを解析する

分類Dev

配列内の配列をswift4でjsonを解析する方法

分類Dev

Javaの配列を使用して複雑なXMLを解析する

分類Dev

PHPを使用して複雑なXMLを解析する

分類Dev

F#JSON解析-複雑なパス(いくつかのプロパティ名で構成される)を使用してプロパティを取得する方法

分類Dev

Swift4のCodableを使用して、オプションの小数秒を含む日付文字列を変換する方法

Related 関連記事

  1. 1

    swift4の少し複雑なjsonからデータを解析して取得する方法は?

  2. 2

    swift4を使用してJSONを解析する方法

  3. 3

    SwiftでCodableを使用してJSONを解析する

  4. 4

    SwiftでCodableを使用してJSON応答を解析する

  5. 5

    複雑でネストされたデータを使用したSwift4でのJSON解析

  6. 6

    Go非整列化を使用して複雑なJSONを解析する方法は?

  7. 7

    gsonまたはjacksonを使用して複雑なjsonを解析する方法

  8. 8

    Swift Codable:辞書を使用してJSONを解析しますか?複数の異なるエントリ?

  9. 9

    Swift4でFetchedResultsControllerを使用してDateSectionTitlesを取得する方法

  10. 10

    UnityでC#を使用して複雑なJSONオブジェクトを解析する方法

  11. 11

    変数をキーとしてjsonを解析するSwift4

  12. 12

    Alamofireを使用してSwift4でYoutubeAPIを解析します

  13. 13

    Swift4 / 5を使用して複数のクラスを拡張する方法

  14. 14

    Goで複雑なJSONを解析する

  15. 15

    Pythonで複雑なJSONを解析する

  16. 16

    Codableを使用してSwiftで辞書の配列を解析する

  17. 17

    Swift4を使用したJSON解析

  18. 18

    swift4でUIImagePickerControllerを使用する方法

  19. 19

    Codableを使用して一般的な応答を解析する方法

  20. 20

    TypeScriptを使用して複雑なjsonオブジェクトを解析する

  21. 21

    JavaScriptとRegExを使用して複雑なBibTexアイテムを解析する方法

  22. 22

    動的キーを使用してSwift4でネストされたJSONからデータを抽出する方法

  23. 23

    Codableを使用したSwift4デコードjson

  24. 24

    JavaでGSONを使用して複雑なJsonオブジェクトを解析する

  25. 25

    配列内の配列をswift4でjsonを解析する方法

  26. 26

    Javaの配列を使用して複雑なXMLを解析する

  27. 27

    PHPを使用して複雑なXMLを解析する

  28. 28

    F#JSON解析-複雑なパス(いくつかのプロパティ名で構成される)を使用してプロパティを取得する方法

  29. 29

    Swift4のCodableを使用して、オプションの小数秒を含む日付文字列を変換する方法

ホットタグ

アーカイブ