From a61f63df7d19006b36adf7ee402999aa5243097d Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Tue, 22 Jul 2014 11:22:47 -0400 Subject: [PATCH] Allow empty string object keys in json_object(). This makes the behaviour consistent with the json parser, other json-generating functions, and the JSON standards. --- src/backend/utils/adt/json.c | 8 -------- src/test/regress/expected/json.out | 8 ++++++-- src/test/regress/expected/json_1.out | 8 ++++++-- src/test/regress/sql/json.sql | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c index 11c9135b482..8dd7a21fcff 100644 --- a/src/backend/utils/adt/json.c +++ b/src/backend/utils/adt/json.c @@ -2184,10 +2184,6 @@ json_object(PG_FUNCTION_ARGS) errmsg("null value not allowed for object key"))); v = TextDatumGetCString(in_datums[i * 2]); - if (v[0] == '\0') - ereport(ERROR, - (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), - errmsg("empty value not allowed for object key"))); if (i > 0) appendStringInfoString(&result, ", "); escape_json(&result, v); @@ -2272,10 +2268,6 @@ json_object_two_arg(PG_FUNCTION_ARGS) errmsg("null value not allowed for object key"))); v = TextDatumGetCString(key_datums[i]); - if (v[0] == '\0') - ereport(ERROR, - (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), - errmsg("empty value not allowed for object key"))); if (i > 0) appendStringInfoString(&result, ", "); escape_json(&result, v); diff --git a/src/test/regress/expected/json.out b/src/test/regress/expected/json.out index cd6ea5b12d5..de4d49d5b2d 100644 --- a/src/test/regress/expected/json.out +++ b/src/test/regress/expected/json.out @@ -1213,9 +1213,13 @@ ERROR: mismatched array dimensions -- null key error select json_object('{a,b,NULL,"d e f"}','{1,2,3,"a b c"}'); ERROR: null value not allowed for object key --- empty key error +-- empty key is allowed select json_object('{a,b,"","d e f"}','{1,2,3,"a b c"}'); -ERROR: empty value not allowed for object key + json_object +----------------------------------------------------- + {"a" : "1", "b" : "2", "" : "3", "d e f" : "a b c"} +(1 row) + -- json_to_record and json_to_recordset select * from json_to_record('{"a":1,"b":"foo","c":"bar"}') as x(a int, b text, d text); diff --git a/src/test/regress/expected/json_1.out b/src/test/regress/expected/json_1.out index 51657a8d70f..2f8e8b0a9cb 100644 --- a/src/test/regress/expected/json_1.out +++ b/src/test/regress/expected/json_1.out @@ -1209,9 +1209,13 @@ ERROR: mismatched array dimensions -- null key error select json_object('{a,b,NULL,"d e f"}','{1,2,3,"a b c"}'); ERROR: null value not allowed for object key --- empty key error +-- empty key is allowed select json_object('{a,b,"","d e f"}','{1,2,3,"a b c"}'); -ERROR: empty value not allowed for object key + json_object +----------------------------------------------------- + {"a" : "1", "b" : "2", "" : "3", "d e f" : "a b c"} +(1 row) + -- json_to_record and json_to_recordset select * from json_to_record('{"a":1,"b":"foo","c":"bar"}') as x(a int, b text, d text); diff --git a/src/test/regress/sql/json.sql b/src/test/regress/sql/json.sql index 3215b61a5a8..ae65ef6921e 100644 --- a/src/test/regress/sql/json.sql +++ b/src/test/regress/sql/json.sql @@ -435,7 +435,7 @@ select json_object('{a,b,c,"d e f"}','{1,2,3,"a b c",g}'); select json_object('{a,b,NULL,"d e f"}','{1,2,3,"a b c"}'); --- empty key error +-- empty key is allowed select json_object('{a,b,"","d e f"}','{1,2,3,"a b c"}');