Ah, you are right that it might not be human-friendly.

I don't want to rely on the order, but for (file) versioning it is quite valuable. (or rather changing the order can easily make versioning quite worthless).

I can manually sort it, but it creates a lot of mess:

(NeoJSONWriter on: stream)
prettyPrint: true;
for: Something
do: [ :mapping | mapping mapInstVars: (mapping identifier instVarNames \ #(unwanted)) sorted ];
for: Otherthing
do: [ :mapping | mapping mapInstVars: mapping identifier instVarNames sorted ];
for: Point
do: [ :mapping | mapping mapInstVars: mapping identifier instVarNames sorted ];
nextPut: anObject.

I'd much rather have the following:

(NeoJSONWriter on: stream)
prettyPrint: true;
sorted: true;
for: Something
do: [ :mapping | mapping mapInstVars: mapping identifier instVarNames \ #(unwanted) ];
mapInstVarsFor: Otherthing;
mapInstVarsFor: Point;
nextPut: anObject.

or more fine-grained, although the above is imo nicer:

(NeoJSONWriter on: stream)
prettyPrint: true;
for: Something
do: [ :mapping | mapping mapInstVars: (mapping identifier instVarNames \ #(unwanted)) sorted ];
mapInstVarsFor: Otherthing sorted: true;
mapInstVarsFor: Point sorted: true;
nextPut: anObject.

(or mapSortedInstVarsFor: or something)..

Peter

On Wed, Jul 25, 2018 at 11:20 AM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
From json.org

�� "An object is an unordered set of name/value pairs."

IOW, it is not in the spec, it would be dangerous to rely up it in any way (not that you are suggesting that). It might look better sometimes, but even then alphabetic sorting might not be the most human friendly or most meaningful.

Note that 'properties' in NeoJSONMapping is an OrderedCollection, so it keeps it order. So if you add them in the right order, that would do it.

> On 25 Jul 2018, at 11:12, Peter Uhn��k <i.uhnak@gmail.com> wrote:
>
> Hi,
>
> would it be possible to provide option to automatically sort instance variables when serializing objects?
>
> Either always sorted
>
> NeoJSONObjectMapping>>writeObject: anObject on: jsonWriter
>�� �� �� ��jsonWriter writeMapStreamingDo: [ :jsonMapWriter |
>�� �� �� �� �� �� �� ��(properties sorted: #propertyName ascending) do: [ :each |
>�� �� �� �� �� �� �� �� �� �� �� ��each writeObject: anObject on: jsonMapWriter ] ]
>
> or put it behind some sortProperties boolean flag. (atm I don't see any downsides in having sort always enabled)

Speed ?
A false suggestion that is part of the spec ?

> Thanks,
> Peter