On 08/02/2013 01:04 PM, Bruce Momjian wrote:
On Wed, Jul 10, 2013 at 07:07:54PM +0000, jaroslav.pota...@gmail.com wrote:
The following bug has been logged on the website:
Bug reference: 8293
Logged by: Yaroslav Potapov
Email address: jaroslav.pota...@gmail.com
PostgreSQL version: Unsupported/Unknown
Operating system: All
Description:
SELECT '"a\"b"'::json::text
returns text: '"a\"b"' ,
but it must return 'a"b' in my opinion.
I see you didn't get a reply, so let me try. I am no JSON expert, but I
think what is happening is that the system stores "a\"b" because that is
what a JSON/Javascript interpreter would need to understand that value.
It would convert "a\"b" to a"b. If we just stored a"b, the interpreter
would throw an error on input.
Well, yes, although the shorter answer is simply that we would not be
storing legal JSON, which is defined by a standard, not by the
requirements of interpreters.
There is no specific cast to text for json. The cast therefore calls the
type's output function, which of course delivers the json string. To do
as the OP suggests would require us to treat JSON scalar strings as
special, since we would certainly not want to de-escape any JSON that
wasn't just a scalar string. e.g. removing quotes or backslashes in this
would be a major error:
select '{"\"a": "b\"c"}'::json::text;
IOW, this isn't a bug in my view.
What we should possibly provide is a function to de-escape JSON scalar
strings explicitly. It would be a simple extension to write,
particularly for 9.3 where the JSON parser is hookable. (Or it could
easily be added as a core function of course).
cheers
andrew
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs