> On Apr 10, 2017, at 02:52, David Hart via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
>> 
>> On 10 Apr 2017, at 11:36, piotr gorzelany via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> This is a really great proposal. As an iOS developer I work with JSON almost 
>> every day since most mobile apps communicate with a backend through JSON 
>> messages. It's good to see that better JSON support is coming to Foundation 
>> so we don't have to rely on third party libraries.
>> 
>> That being said, there is one thing I don't like which is that the JSON 
>> encoding function returns Data and the decoding function takes Data.
>> 
>> It would be really great if the Foundation team could introduce a dedicated 
>> type of JSON.
>> There are several advantages of working with a dedicated type.
>> - The underlying data is always valid JSON
>> - You can extend this type in the future with helper methods for 
>> manipulating JSON
>> - It makes it explicit what you are dealing with
>> 
>> A good analogy is the URL type. You could represent an URL with a String or 
>> Data type, but by introducing a dedicated type you have the full advantages 
>> mentioned above. Data on the other hand is like a generic container which 
>> you cannot easily extend with URL or JSON specific methods.
>> 
>> Having a dedicated JSON type is also one of the reasons third party 
>> libraries like SwiftyJSON are so popular. It makes it super easy to 
>> manipulate JSON structures. And sometimes developers like would like to 
>> manipulate JSON directly.
> 
> I don’t think it would be a good thing to have this in Foundation. Foundation 
> needs to push developers towards adopting best practices, and manipulating 
> JSON directly instead of going through Codable’s strong-typing is not 
> necessarily recommended. I’m not saying it doesn’t have its uses. But it’s 
> usefulness is definitely narrow now once we have Codable. I think this is 
> something that should stay in a third-party library.

I haven't thought heavily about this, but the thoughts that I have say that 
JSON just isn't a good type in Swift. It's not an efficient in-memory 
representation and it's not a convenient structural representation (because of 
the use of either 'Any' or 'JSON' in the recursive position). I'll admit that 
sometimes you're handed some JSON and you want to extract a little bit of 
information out of it without building a typed representation of the whole 
thing, but that still seems like something that doesn't need to be the common 
path.

Jordan

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

Reply via email to