Once again, thanks for the interesting background to all of this (although I didn’t mean to cause so much discussion on the merits of the json spec).
Anyway, I did check with the authors of Prismic.io - and they confirmed that their intent is that their document (schema?) does order block elements in the json - and this is something you can rely on. So, its not really in my control to do otherwise. Tim > On 11 Jun 2018, at 09:19, Tim Mackinnon <tim@testit.works> wrote: > > Yes i was a bit nervous about the ordering, but had also noticed other > examples like this - but it is a good reminder for me to double check with > the developers that they consciously have done this and to register an > interest that it stays that way (particularly as they strangely don’t provide > access to a schema for your user type definition - and hence could get the > ordering from that). > > On a second note - I did phase out my use of NeoJsonObject after the > community warning (and realised how much it had worked into my solution). I > think explicitly handling the absent key is better (I do loathe nil checks > and am surprised how many languages set this terrible example - of shocked > how easily I fell into that trap too). That said - I did miss the #atPath: > concept in NeoJson and ended up adding an equivalent (better?) > #atPath:ifAbsent: to OrderedDictionary to cope with needing to reach into > structures to pull out relevant attributes. > > It did then remind how much I wish we could sort out some form of > namespacing, as I don’t like to see my model code have to put > prAtPath:ifAbsent: (it’s just gross). Maybe I might subclass > OrderedDictionary to get the namespacing on a class and my methods can be > safely clean). > > Appreciate the commentary on this, it’s been a useful exercise. > > Tim > > Sent from my iPhone > > On 11 Jun 2018, at 08:02, Norbert Hartl <norb...@hartl.name > <mailto:norb...@hartl.name>> wrote: > >> >> >>> Am 11.06.2018 um 08:55 schrieb Richard O'Keefe <rao...@gmail.com >>> <mailto:rao...@gmail.com>>: >>> >>> 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. >>> >> But when it does what do you do? It is pretty clear that the order is >> important for that format. So saying it shouldn’t matter does not make it >> better. If you work with mongo DB you will see the same that for some >> queries you have to provide proper order of keys. >> >> Norbert >> >>> On 8 June 2018 at 00:16, Tim Mackinnon <tim@testit.works >>> <mailto: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 >>> <http://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 <s...@stfx.eu >>> > <mailto:s...@stfx.eu>> wrote: >>> > >>> > >>> > >>> >> On 7 Jun 2018, at 08:16, Norbert Hartl <norb...@hartl.name >>> >> <mailto:norb...@hartl.name>> wrote: >>> >> >>> >> >>> >> >>> >>> Am 07.06.2018 um 07:29 schrieb Sven Van Caekenberghe <s...@stfx.eu >>> >>> <mailto:s...@stfx.eu>>: >>> >>> >>> >>> Tim, >>> >>> >>> >>>> On 7 Jun 2018, at 01:37, Tim Mackinnon <tim@testit.works >>> >>>> <mailto: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 >>> >>> >>> >>