On 05/20/2015 09:16 AM, Shulgin, Oleksandr wrote:
Hi, Hackers!
Attached is a patch against master to generalize the JSON-producing
functions in utils/adt/json.c and to provide a set of callbacks which
can be overridden the same way that is already provided for *parsing*
JSON.
The motivation behind this to be able to produce specially-crafted
JSON in a logical replication output plugin, such that numeric (and
bigint) values are quoted. This requirement, in turn, arises from the
fact that JavaScript specification, which is quite natural to expect
as a consumer for this JSON data, allows to silently drop significant
digits when converting from string to number object.
I believe this is a well-known problem and I'm aware of a number of
tricks that might be used to avoid it, but none of them seems to be
optimal from my standpoint.
I can also imagine this can be used to convert date/time to string
differently, or adding indentation depending on the depth in object
hierarchy, etc.
I'm not necessarily opposed to this, but it sure seems like a lot of
changes, and moderately invasive ones, to support something that could
be done, at the cost of reparsing, with a simple loadable extension that
I could create in a few hours of programming. The parser API was created
precisely to make this sort of transformation close to trivial. Other
fairly obvious transformations include translating to XML or YAML, and a
less obvious one could be something very specialized, like translating
certain fields. Anyway, for this purpose I could imagine a function like:
json_format (
j json (or text),
indent_spaces smallint default 0,
space_after_colon boolean default false,
space_after_comma boolean default false,
quote_numerics boolean default false)
returns json
cheers
andrew
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers