Sven- thinking a bit more

On 28 Feb 2019, at 13:59, Sven Van Caekenberghe <sven@stfx.eu> wrote:

This is wrong !!

Think about it, what would then happen with a mixed list ?

{ #key->#value. 1. true }

That would generate invalid JSON.


I actually went and tried my little hack with your example and it gives the same error as STONWriter - so actually my proposal isn���t so horrid as inferred��� (but still not as knowledgable as everyone else on this for sure).

As a reminder - I wanted a compact way to express the following (sort of like you would expect in Javascript) -

ex := { 
'track'-> 'pharo'. 
'language' -> 'smalltalk'.
'exercises' -> {
'slug' -> 'hello'.
'id' -> 55.
'topics' -> #('a' 'b' 'c') } 
}.

String streamContents: [ :stream |
(STONJSONWriter on: stream) jsonMode: true; prettyPrint: true; nextPut: ex  ].


My pragmatic changes were 2 methods as follows -

writeAssociation: association
self 
encodeKey: association key 
value: association value

writeObject: anObject do: block
jsonMode ifTrue: [ 
(anObject isKindOf: OrderedCollection)
���so you don���t have to asArray everywhere"
ifTrue: [ ^self writeList: anObject ].
(anObject isKindOf: OrderedDictionary)
���so you can output { } for libs that need it - does require asOrderedDictionary"
ifTrue: [ ^self writeMap: anObject ]].
super writeObject: anObject do: block 

(And if you assume your using json - a class method

 on: writeStream
^ (super on: writeStream)
jsonMode: true;
prettyPrint: true;
yourself