Hi Masaki,

Do you mean that you are going through the JSON as a string value and changing 
the keys, then you want to pass this re-written JSON to the decoder?

- Tony

> On Jun 21, 2017, at 6:58 PM, Masaki Haga via swift-users 
> <swift-users@swift.org> wrote:
> 
> Hi Swift-Users,
> 
> I was wondering if there is any way to decode JSON from Any type JSON Object 
> using `JSONDecoder`, not from Data type object. 
> 
> Currently, `JSONDecoder` has only one decode function which decodes Data type 
> object to `Decodable`. Inside the function, it serializes Data object to Any 
> Type JSON Object using `JSONSerialization` and pass it into 
> `_JSONDecoder(referencing:, options:)` (Refer JSONEncoder.swift#874).
> 
> As discussed in some of other threads such as "SE-0166: Swift Archival & 
> Serialization", the default implementation of JSONDecoder or Decodable 
> protocol doesn’t allow to decode from one format to another format (such as 
> snake-case to camel-case), we need to implement custom CodingKey enums. 
> However, in our project, to parse the server API JSON response with 
> snake-case, declaring custom CodingKey enums for all the pre-existing models 
> is almost impossible and very inefficient, so I decided to covert all the 
> JSON keys from snake-case to camel-case, and then pass it into 
> `JSONDecoder.decode`. To achieve this, we need to convert the Data object 
> resulted from `URLSession.task` to Any type JSON Object using 
> `JSONSerialization`, do the conversion from snake-case to camel-case and then 
> convert back to Data type and then pass to `JSONDecoder.decode` which looks 
> very redundant because the function uses `JSONSerialization` inside of it as 
> mentioned above. If there is a function like below, we can get rid of this 
> redundant call of `JSONSerialization`.
> 
> ```
> func decode<T : Decodable>(_ type: T.Type, from JSONObject: Any) throws -> T
> ```
> 
> Sorry if I am misunderstanding the new API but is there any way to decode 
> `Decodable` directly from Any type JSON Object?
> 
> If not, I think adding the function aforementioned and giving an ability to 
> opt-out this JSON serialization call would give more flexibility to the API 
> in my humble opinion.
> 
> Thank you for reading.
> 
> All the best,
> - Masaki
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to