0

I tried to solve with many tutorials, but couldn't.

I have JSON structure like this.

    {
"Region":[
   {
      "head":[
         {
            "total_count":572888
         },
         {
            "RESULT":{
               "CODE":"000",
               "MESSAGE":"Success."
            }
         },
         {
            "api_version":"1.0"
         }
      ]
   },
   {
      "row":[
         {
            "COM_NAME":"company",
            "TYPE_CD":null,
            "BIZ_NM":null,
            "TYPE_NM":null,
            "TELNO":"111-1111-1111",
            "MNY_NM":null,
            "POSBL_YN":null,
            "DATE":"2018-09-30",
            "ROAD_ADDR":"adrress",
            "ZIP_CD":"10303",
            "LOGT":"126.80090346",
            "LAT":"37.673069059",
         }
        ]
    }
]

}

What I want to do is decode some properties from row section.

So I created some structs like this.

struct List: Decodable {
    let Region: [Stores]
}


struct Stores: Decodable {
    let row: [StoreInfo]
}

struct StoreInfo: Decodable {
    let COM_NAME: String?
    let TYPE_NM: String?
    let TELNO: String?
    let DATE: String?
    let ROAD_ADDR: String?
    let LOGT: String?
    let LAT: String?
}

And decode with Jsondecoder like this.

 let decodedData = try JSONDecoder().decode(List.self, from: data)
 print(decodedData)

I get error like this.

    keyNotFound(CodingKeys(stringValue: "Region", intValue: nil),
 Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"Region\", intValue: nil) 
(\"Region\").", underlyingError: nil))

How can I decode correctly?

2 Answers 2

1

The array "Region" contains different types, in swift it would be declared as [Any], so you need to declare row as optional so when the decoder finds and tries to decode the element "head" it will just ignore that element and decode the next one.

struct Stores: Decodable {
    let row: [StoreInfo]?
}

PS
The error you posted isn't generated from the code posted, the real error for the posted code is

keyNotFound(CodingKeys(stringValue: "row", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "Region", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: \"row\", intValue: nil) (\"row\").", underlyingError: nil))

DS

Sign up to request clarification or add additional context in comments.

Comments

0

I used stores and store info as optional and created struct with Codable and it worked.

struct List: Codable {
    let Region: [Stores]?
}


struct Stores: Codable {
    let row: [StoreInfo]?
}

struct StoreInfo: Codable {
    let COM_NAME: String?
    let TYPE_NM: String?
    let TELNO: String?
    let DATE: String?
    let ROAD_ADDR: String?
    let LOGT: String?
    let LAT: String?
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.