1
votes

I am trying to update my app to use Swift 4 Decodable - and am pulling down data from a JSON api which has child values which could be:

  • A Child Object
  • A String
  • An Int

Here is the Json Api response:

var jsonoutput =
"""
{
"id": "124549",
"key": "TEST-32",
"fields": {
"lastViewed": "2018-02-17T21:40:38.864+0000",
"timeestimate": 26640
}
}
""".data(using: .utf8)

I have tried to parse it using the following: which works if I just reference the id and key properties which are both strings.

struct SupportDeskResponse: Decodable{
    var id: String
    var key: String
    //var fields: [String: Any] //this is commented out as this approach doesn't work - just generated a decodable protocol error.            
}

var myStruct: Any!
do {
    myStruct = try JSONDecoder().decode(SupportDeskResponse.self, from: jsonoutput!) 
} catch (let error) {
    print(error)
}

print(myStruct) 

How do I decode the fields object into my Struct?

1

1 Answers

5
votes

You should create a new Struct adopting Decodable protocol like this :

struct FieldsResponse: Decodable {
    var lastViewed: String
    var timeestimate: Int
}

Then you can add it to your SupportDeskResponse

var fields: FieldsResponse