If numeric keys are silently written as strings when generating
JSON, you can get JSON that is technically legal but practically
ambiguous.�� Start with the obvious:
���� (Dictionary new: 2) at: 1 put true; at: '1' put false; asJson
=> {"1": true, "1": false}.
More subtly,
���� d := Dictionary new: 2.
���� d at: 1.0 put: true.
���� d at: 1.0 successor put: false.
���� FloatPrintPolicy
�������� value: InexactFloatPrintPolicy new
�������� during: [d asJson]
=> {"1.0": true, "1.0": false}.

All things considered, *not* accepting numeric keys seems like
the best thing to do.


On Sat, 23 Feb 2019 at 09:23, Esteban Maringolo <emaringolo@gmail.com> wrote:
If you convert a Dictionary with numbers as keys it will produce not
valid JSON [1], since all object keys must be quoted.

E.g.
NeoJSONWriter toString: (Dictionary with: 1->'foo').
or
(Dictionary with: 1->'foo') asJson

Should the library generate quoted keys?

Seaside's WAJsonCanvas is manual, so it is up to the developer to
render the object properly, but NeoJSON does it automatically.

In Javascript this will throw a syntax error:
> JSON.parse('{1: "foo"}')

And this would generate a quoted key when serialized:
> JSON.stringify({1: "foo"})
> {"1": "foo"}

So my question is: should the library quote whatever you put as key in
order to produce valid JSON syntax? [2]

Regards.

[1] https://jsonlint.com/
[2] https://www.ecma-international.org/publications/standards/Ecma-404.htm

Esteban A. Maringolo