This behavior surprised me a bit:
david=# select '{"foo": 1, "foo": 2}'::json;
json
----------------------
{"foo": 1, "foo": 2}
I had expected something more like this:
david=# select '{"foo": 1, "foo": 2}'::json;
json
------------
{"foo": 2}
This hasn’t been much of an issue before, but with Andrew’s JSON enhancements
going in, it will start to cause problems:
david=# select json_get('{"foo": 1, "foo": 2}', 'foo');
ERROR: field name is not unique in json object
Andrew tells me that the spec requires this. I think that’s fine, but I would
rather that it never got to there.
In the spirit of being liberal about what we accept but strict about what we
store, it seems to me that JSON object key uniqueness should be enforced either
by throwing an error on duplicate keys, or by flattening so that the latest key
wins (as happens in JavaScript). I realize that tracking keys will slow parsing
down, and potentially make it more memory-intensive, but such is the price for
correctness.
Thoughts?
Thanks,
David
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers