title: How to parse complex JSON in Swift 4 using Codable
body: <p>I need help with parsing JSON from server. Here's the JSON:</p>
  
  <pre><code>{
  "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"
  }
  </code></pre>
  
  <p>}</p>
  
  <p>What I need to get from this JSON are lines: "text", "comments", "likes", "reposts", "attachments".</p>
  
  <p>Inside "attachments" field I want to get "photo_604" line.</p>
  
  <p>Here's my code:</p>
  
  <pre><code>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
  }
  </code></pre>
  
  <p>But after making the request:</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>I get an error:</p>
  
  <blockquote>
    <p>Fatal error: 'try!' expression unexpectedly raised an error:
    Swift.DecodingError.keyNotFound(_UL_PetrovLeonid.NewsItems.(CodingKeys
    in _FA9A2FC8130449AA328C19ACD9506C2D).attachments,
    Swift.DecodingError.Context(codingPath:
    [_UL_Leonid.ResponseNewsFeed.(CodingKeys in
    _FA9A2FC8130449AA328C19ACD9506C2D).response, _UL_PetrovLeonid.WhatIsIsideResponseNewsFeed.(CodingKeys in _FA9A2FC8130449AA328C19ACD9506C2D).items, Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0))], debugDescription: "No value associated with key
    attachments (\"attachments\").", underlyingError: nil))</p>
  </blockquote>
  
  <p>Why is that happening and what do I need to do to solve it? I've been into coding only three months from now, so please forgive me beforehand if my problem seems silly.</p>
  
  <p>Thank you.</p>