As I merrily chat to myself - I noticed that STONWriter almost does what I need - it just complains in #writeAssociation: so I make a subclass STONJSONWriter and override:
writeAssociation: association
�� �� �� �� ���don���t smack me���.
�� �� �� �� jsonMode
�� �� �� �� �� �� �� �� ifTrue: [ self error: 'wrong object class for JSON mode' ]."
�� �� �� �� self
�� �� �� �� �� �� �� �� encodeKey: association key
�� �� �� �� �� �� �� �� value: association value
I get exactly what I would expect - valid Json from simple Collections, Associations and Array.
So would it be handy to have such a writer in the image (or let STONWriter be more configurable for this?)
Tim
p.s. my finally example would then be:
ex := { 'track'-> 'pharo'.
�� �� �� �� 'language' -> 'smalltalk'.
�� �� �� �� ��'exercises' ->
�� �� �� �� �� �� �� �� {'slug' -> 'hello'.
�� �� �� �� �� �� �� �� 'id' -> 55.
�� �� �� �� �� �� �� �� 'topics' -> #('a' 'b' 'c') }
�� �� �� �� �� �� �� �� }.
String streamContents: [ :stream |
�� �� �� �� (STONJSONWriter on: (stream))
�� �� �� �� �� �� �� �� jsonMode: true;
�� �� �� �� �� �� �� �� prettyPrint: true;�� �� ��
�� �� �� �� �� �� �� �� writeList: ex ].
> On 28 Feb 2019, at 13:45, Tim Mackinnon <tim@testit.works> wrote:
>
> Just to add more flavour to this - it seems quite wordy that we have to do this (or equivalent) to write some config.
>
> ex := OrderedDictionary new
>�� �� �� ��at: 'track' put: 'pharo';
>�� �� �� ��at: 'language' put: 'smalltalk';
>�� �� �� ��at: 'exercises' put: (
>�� �� �� �� �� �� �� ��OrderedDictionary new
>�� �� �� �� �� �� �� �� �� �� �� ��at: 'slug' put: 'hello';
>�� �� �� �� �� �� �� �� �� �� �� ��at: 'id' put: 55;
>�� �� �� �� �� �� �� �� �� �� �� ��at: 'topics' put: #('a' 'b' 'c');
>�� �� �� �� �� �� �� �� �� �� �� ��yourself );
>�� �� �� ��yourself.
>�� �� �� �� �� �� �� ��
> String streamContents: [ :stream |
>�� �� �� ��(NeoJSONWriter on: (stream)) prettyPrint: true;
>�� �� �� ��mapInstVarsFor: Association;
>�� �� �� ��nextPut: ex ].
>
> So I���m still wondering the NeoJSONObjectMapping can do something easy for Association other than simply mapInstVars?
>
>
>> On 28 Feb 2019, at 13:36, Tim Mackinnon <tim@testit.works> wrote:
>>
>> Hi Sven - is there no convenience shortcut we can use in our code to make this less wordy when we are specifying it?
>>
>> E.g. the following is very convenient to write - but doesn���t work (as you have $��� and not $��� )
>>
>> ex := { 'track'-> 'pharo'.
>>�� �� �� 'language' -> 'smalltalk'.
>>�� �� �� ��'exercises' ->
>>�� �� �� �� �� �� �� {'slug' -> 'hello'.
>>�� �� �� �� �� �� �� 'id' -> 55.
>>�� �� �� �� �� �� �� 'topics' -> #('a' 'b' 'c') }
>>�� �� �� �� �� �� �� }.
>>�� �� �� �� �� �� ��
>> String streamContents: [ :stream |
>>�� �� �� (STONWriter on: (stream)) prettyPrint: true;�� �� writeList: ex ].
>>
>> I had thought maybe NeoJSON might help and put:
>>
>> String streamContents: [ :stream |
>>�� �� �� (NeoJSONWriter on: (stream)) prettyPrint: true;
>>�� �� �� "mapInstVarsFor: Association;"
>>�� �� �� nextPut: ex ].
>>
>> But I get the error about missing an association mapping. If I uncomment that bit - I get things like: { "value" : ���pharo" },
>>
>> So is there a way I can write a simple mapper for Association that will write out the key in a string and the value in a string?
>>
>> I���m quite suprised we can���t easily write out fragments of Json in our code in a light weight way? Or do I need to make a proper Config object and then teach it how to map properly such that rather than fiddling with our { x->y } dictionary sugar I do something like:
>>
>> Config new at: ���id��� is: 123; at: ���name��� is: ���Tim���; at: ���exercises��� is: #(1 2 3).
>>
>> And I guess at:is: can do the Association asDictionary thing?
>>
>> But I thought Neo might give me something like that, as it must be terribly common?
>>
>> Tim
>>
>>> On 28 Feb 2019, at 13:16, Sven Van Caekenberghe <sven@stfx.eu> wrote:
>>>
>>> STONJSON toString: { #id->1. #name->'tim' } asDictionary.
>>>
>>> JSON cannot deal with Associations by themselves.
>>>
>>>> On 28 Feb 2019, at 14:05, Tim Mackinnon <tim@testit.works> wrote:
>>>>
>>>> I am stumped about how to write out some simple json (for a config file). I didn't think I need Neo, and STONJSON would be fine but it seems like creating items like:
>>>>
>>>> { 'id'-> self id. 'name' -> self name }
>>>>
>>>> gives an error about the association. I think you have to do: { ('id'-> self id) asDictionary. ('name' -> self name) asDictionary } everywhere���.
>>>>
>>>> But when I switch over to NeoJsonWriter it also complains about Assocations too. I just want a simple output like:
>>>> { "id" : 12, "name" : "tim��� }
>>>>
>>>> I thought it was simple to do this? Am I missing something obvious.
>>>>
>>>> Tim
>>>
>>>
>>
>>
>
>