The new `JSONSerialization.WritingOptions.sortedKeys` option was mentioned at 
WWDC.

"What's New in Cocoa" [33:03 ... 33:33]
<https://developer.apple.com/videos/play/wwdc2017/207/?time=1983>

<https://developer.apple.com/documentation/foundation/jsonserialization.writingoptions>

When the `sortedKeys` option is available, can it be used **by default** in the 
`JSONEncoder`?

Otherwise, can the `JSONEncoder.OutputFormatting` enum have extra cases?

case compact
case compactWithSortedKeys
case prettyPrinted
case prettyPrintedWithSortedKeys

<https://developer.apple.com/documentation/foundation/jsonencoder.outputformatting>

-- Ben

> On 16 Mar 2017, at 22:47, Itai Ferber <[email protected]> wrote:
> 
> The sorted order of keys is an implementation detail of 
> PropertyListSerialization which JSONSerialization does not share.
> This would require a change in JSONSerialization, which is possible, but out 
> of scope for this work specifically. It would have to go through review.
> 
> [FWIW, the key ordering isn’t changing at random; JSONSerialization writes 
> keys in the order that it receives them (sorted in the order that 
> NSDictionary stores them, based on hash). If you want this to not interfere 
> with your Git repo (on a more immediate timescale), you can probably do 
> something like adding a pre-commit Git hook to lint the file as needed. But I 
> digress, this is totally off-topic.]
> 
>> On 16 Mar 2017, at 14:57, Ben Rimmington wrote:
>> 
>> Sorry, I actually meant that keys would be ordered **alphabetically** (as 
>> they are with PropertyListSerialization).
>> 
>> I'm storing output from JSONSerialization in a git repository, and when I 
>> add/remove a single key-value the entire file changes, due to keys being 
>> reordered (seemingly at random).
>> 
>> -- Ben
>> 
>>> Itai Ferber wrote:
>>> 
>>> By stable ordering, you mean dictionaries with keys being output in the 
>>> order that they were encoded?
>>> Potentially, but this would require additional work as neither Swift 
>>> dictionaries nor NSMutableDictionary support this (reasonable seeing as 
>>> dictionaries are by definition not sorted), and the current implementation 
>>> uses JSONSerialization as the concrete serializer. Certainly not 
>>> impossible, though.
>>> 
>>>> On 16 Mar 2017, at 8:49, Ben Rimmington wrote:
>>>> 
>>>> <https://github.com/apple/swift-evolution/pull/640>
>>>> 
>>>> Could the `JSONEncoder.OutputFormatting.prettyPrinted` case include the 
>>>> **stable ordering** of keys?
>>>> 
>>>> -- Ben
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to