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