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 <emaring...@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 > >