> On Jun 12, 2017, at 8:32 AM, Ben Rimmington via swift-evolution > <[email protected]> wrote: > > 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? >
We intend to make this option available to JSONEncoder as well, but since the underlying feature was tied to the OS release we couldn’t pre-announce it. One nit pick: I don’t think default is the right answer, because sorting has a performance cost and we think it’s better to opt-in to the more expensive operations. - Tony > 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 _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
