The order of key:value pairs in a JSON "object" is really NOT supposed to matter. For example, if you put {"a":1,"b":2} into a JSON database you should not be surprised to get {"b":2,"a":1} back. Or vice versa, of course. On 8 June 2018 at 00:16, Tim Mackinnon <tim@testit.works> wrote:
Thanks guys - it seems like I was on the right track.
Making my own NeoJsonObject did work, but I will go back and see if Iâm really using the js nature of the values and if for this, just an OrderedDictionary might be clearer.
As an aside, I was doing some experiments with prismic.io (a headless cms) and the order of your content when rendering it on a page(generically) is obviously important.
Tim
Sent from my iPhone
On 7 Jun 2018, at 07:46, Sven Van Caekenberghe <sven@stfx.eu> wrote:
On 7 Jun 2018, at 08:16, Norbert Hartl <norbert@hartl.name> wrote:
Am 07.06.2018 um 07:29 schrieb Sven Van Caekenberghe <sven@stfx.eu>:
Tim,
On 7 Jun 2018, at 01:37, Tim Mackinnon <tim@testit.works> wrote:
Hi - Iâve hit some Json where the outputted values (they are field names) are written out in a specific order - and the author hasnât chosen to use an array to represent those fields in a specific order.
{ âfield1â : { â¦.}, âfield2â: { ⦠} }
I think this is technically incorrect and should be:
{ [ {âfield1â : { â¦.}, âfield2â: { ⦠} ]}
Anyway - given what Iâve got, would it be a terrible idea to create my own version NeoJsonObject and just make it a subclass of OrderedDictionary?
I canât see any issues - but then I might be kidding myselfâ¦
Tim
Yea, I think you could try making a NeoJSONOrderedObject as a subclass of OrderedDictionary, modelled after NeoJSONObject. Just remember it is implemented using DNU, which will surprise you at one point.
Wouldnât be setting #mapClass: on the reader to OrderedDictionary not enough? Dictionary is the default anyway.
Norbert
Yes, of course, Norbert, it keeps the order:
(NeoJSONReader on: '{"BB":1,"CC":2,"AA":3}' readStream) mapClass: OrderedDictionary; next.
=> an OrderedDictionary('BB'->1 'CC'->2 'AA'->3)
NeoJSONWriter toString: (OrderedDictionary new at: #BB put: 1; at: #CC put: 2; at: #AA put: 3; yourself).
=> '{""BB"":1,""CC"":2,""AA"":3}'
It is not functionally 100% the same as a hypothetical NeoJSONOrderedObject, but might do.
Sven