[Issue 24823] New: std.json: Allow optionally preserving the order of fields in JSON objects

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Oct 21 11:18:49 UTC 2024


https://issues.dlang.org/show_bug.cgi?id=24823

          Issue ID: 24823
           Summary: std.json: Allow optionally preserving the order of
                    fields in JSON objects
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: dlang-bugzilla at thecybershadow.net

The ordering of object members in JSON is explicitly undefined. Therefore,
{"a": 1, "b": 2} and {"b": 2, "a": 1} are the same object.

Nevertheless, it is occasionally useful to control and preserve the order in
which fields appear in JSON files. The most straight forward example is
readability: sometimes, a JSON document is more readable than its equivalent
document where its keys have been sorted e.g. alphabetically, as computers may
not know that it makes sense to leave a "start_date" member right before the
"end_date" member.

Since we already include the option to produce pretty-printed output, which is
similarly not required by any specification but aids readability, such an
enhancement would not be a major deviation from the current std.json feature
set. Furthermore, the ability to preserve JSON field order would bring us
closer to parity with other implementations, not least being current
implementations of JavaScript itself, which preserves Object key order.

It should be possible, via an optional and backwards-compatible way, to request
from std.json that it preserves the order of object fields in memory and during
deserialization, and to obey it in such situations during serialization.

--


More information about the Digitalmars-d-bugs mailing list