<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8">
</head>
<body>
<div style="font-family:sans-serif"><div style="white-space:normal">
<p dir="auto">The sorted order of keys is an implementation detail of <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">PropertyListSerialization</code> which <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">JSONSerialization</code> does not share.<br>
This would require a change in <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">JSONSerialization</code>, which is possible, but out of scope for this work specifically. It would have to go through review.</p>

<p dir="auto">[FWIW, the key ordering isn’t changing at random; <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">JSONSerialization</code> writes keys in the order that it receives them (sorted in the order that <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">NSDictionary</code> 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.]</p>

<p dir="auto">On 16 Mar 2017, at 14:57, Ben Rimmington wrote:</p>

<p dir="auto"></p></div>
<div style="white-space:normal"><blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px"><p dir="auto">Sorry, I actually meant that keys would be ordered **alphabetically** (as they are with PropertyListSerialization).<br>
<br>
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).<br>
<br>
-- Ben<br>
</p>
<blockquote style="border-left:2px solid #777; color:#999; margin:0 0 5px; padding-left:5px; border-left-color:#999"><p dir="auto">Itai Ferber wrote:<br>
<br>
By stable ordering, you mean dictionaries with keys being output in the order that they were encoded?<br>
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.<br>
</p>
<blockquote style="border-left:2px solid #777; color:#BBB; margin:0 0 5px; padding-left:5px; border-left-color:#BBB"><p dir="auto">On 16 Mar 2017, at 8:49, Ben Rimmington wrote:<br>
<br>
&lt;<a href="https://github.com/apple/swift-evolution/pull/640" style="color:#BBB">https://github.com/apple/swift-evolution/pull/640</a>&gt;<br>
<br>
Could the `JSONEncoder.OutputFormatting.prettyPrinted` case include the **stable ordering** of keys?<br>
<br>
-- Ben</p>
</blockquote></blockquote></blockquote></div>
<div style="white-space:normal">
</div>
</div>
</body>
</html>