mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Add json_strip_nulls and jsonb_strip_nulls functions.
The functions remove object fields, including in nested objects, that have null as a value. In certain cases this can lead to considerably smaller datums, with no loss of semantic information. Andrew Dunstan, reviewed by Pavel Stehule.
This commit is contained in:
@ -1586,3 +1586,53 @@ select * from json_to_recordset('[{"a":1,"b":{"d":"foo"},"c":true},{"a":2,"c":fa
|
||||
2 | {"d":"bar"} | f
|
||||
(2 rows)
|
||||
|
||||
-- json_strip_nulls
|
||||
select json_strip_nulls(null);
|
||||
json_strip_nulls
|
||||
------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('1');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('"a string"');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
"a string"
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('null');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
null
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('[1,2,null,3,4]');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
[1,2,null,3,4]
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}');
|
||||
json_strip_nulls
|
||||
------------------------------------
|
||||
{"a":1,"c":[2,null,3],"d":{"e":4}}
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('[1,{"a":1,"b":null,"c":2},3]');
|
||||
json_strip_nulls
|
||||
---------------------
|
||||
[1,{"a":1,"c":2},3]
|
||||
(1 row)
|
||||
|
||||
-- an empty object is not null and should not be stripped
|
||||
select json_strip_nulls('{"a": {"b": null, "c": null}, "d": {} }');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
{"a":{},"d":{}}
|
||||
(1 row)
|
||||
|
||||
|
@ -1582,3 +1582,53 @@ select * from json_to_recordset('[{"a":1,"b":{"d":"foo"},"c":true},{"a":2,"c":fa
|
||||
2 | {"d":"bar"} | f
|
||||
(2 rows)
|
||||
|
||||
-- json_strip_nulls
|
||||
select json_strip_nulls(null);
|
||||
json_strip_nulls
|
||||
------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('1');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('"a string"');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
"a string"
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('null');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
null
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('[1,2,null,3,4]');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
[1,2,null,3,4]
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}');
|
||||
json_strip_nulls
|
||||
------------------------------------
|
||||
{"a":1,"c":[2,null,3],"d":{"e":4}}
|
||||
(1 row)
|
||||
|
||||
select json_strip_nulls('[1,{"a":1,"b":null,"c":2},3]');
|
||||
json_strip_nulls
|
||||
---------------------
|
||||
[1,{"a":1,"c":2},3]
|
||||
(1 row)
|
||||
|
||||
-- an empty object is not null and should not be stripped
|
||||
select json_strip_nulls('{"a": {"b": null, "c": null}, "d": {} }');
|
||||
json_strip_nulls
|
||||
------------------
|
||||
{"a":{},"d":{}}
|
||||
(1 row)
|
||||
|
||||
|
@ -2472,3 +2472,53 @@ SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'e';
|
||||
f
|
||||
(1 row)
|
||||
|
||||
-- jsonb_strip_nulls
|
||||
select jsonb_strip_nulls(null);
|
||||
jsonb_strip_nulls
|
||||
-------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('1');
|
||||
jsonb_strip_nulls
|
||||
-------------------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('"a string"');
|
||||
jsonb_strip_nulls
|
||||
-------------------
|
||||
"a string"
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('null');
|
||||
jsonb_strip_nulls
|
||||
-------------------
|
||||
null
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('[1,2,null,3,4]');
|
||||
jsonb_strip_nulls
|
||||
--------------------
|
||||
[1, 2, null, 3, 4]
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}');
|
||||
jsonb_strip_nulls
|
||||
--------------------------------------------
|
||||
{"a": 1, "c": [2, null, 3], "d": {"e": 4}}
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('[1,{"a":1,"b":null,"c":2},3]');
|
||||
jsonb_strip_nulls
|
||||
--------------------------
|
||||
[1, {"a": 1, "c": 2}, 3]
|
||||
(1 row)
|
||||
|
||||
-- an empty object is not null and should not be stripped
|
||||
select jsonb_strip_nulls('{"a": {"b": null, "c": null}, "d": {} }');
|
||||
jsonb_strip_nulls
|
||||
--------------------
|
||||
{"a": {}, "d": {}}
|
||||
(1 row)
|
||||
|
||||
|
@ -2472,3 +2472,53 @@ SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'e';
|
||||
f
|
||||
(1 row)
|
||||
|
||||
-- jsonb_strip_nulls
|
||||
select jsonb_strip_nulls(null);
|
||||
jsonb_strip_nulls
|
||||
-------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('1');
|
||||
jsonb_strip_nulls
|
||||
-------------------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('"a string"');
|
||||
jsonb_strip_nulls
|
||||
-------------------
|
||||
"a string"
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('null');
|
||||
jsonb_strip_nulls
|
||||
-------------------
|
||||
null
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('[1,2,null,3,4]');
|
||||
jsonb_strip_nulls
|
||||
--------------------
|
||||
[1, 2, null, 3, 4]
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}');
|
||||
jsonb_strip_nulls
|
||||
--------------------------------------------
|
||||
{"a": 1, "c": [2, null, 3], "d": {"e": 4}}
|
||||
(1 row)
|
||||
|
||||
select jsonb_strip_nulls('[1,{"a":1,"b":null,"c":2},3]');
|
||||
jsonb_strip_nulls
|
||||
--------------------------
|
||||
[1, {"a": 1, "c": 2}, 3]
|
||||
(1 row)
|
||||
|
||||
-- an empty object is not null and should not be stripped
|
||||
select jsonb_strip_nulls('{"a": {"b": null, "c": null}, "d": {} }');
|
||||
jsonb_strip_nulls
|
||||
--------------------
|
||||
{"a": {}, "d": {}}
|
||||
(1 row)
|
||||
|
||||
|
@ -509,3 +509,23 @@ select * from json_to_recordset('[{"a":1,"b":"foo","d":false},{"a":2,"b":"bar","
|
||||
|
||||
select * from json_to_recordset('[{"a":1,"b":{"d":"foo"},"c":true},{"a":2,"c":false,"b":{"d":"bar"}}]')
|
||||
as x(a int, b json, c boolean);
|
||||
|
||||
|
||||
-- json_strip_nulls
|
||||
|
||||
select json_strip_nulls(null);
|
||||
|
||||
select json_strip_nulls('1');
|
||||
|
||||
select json_strip_nulls('"a string"');
|
||||
|
||||
select json_strip_nulls('null');
|
||||
|
||||
select json_strip_nulls('[1,2,null,3,4]');
|
||||
|
||||
select json_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}');
|
||||
|
||||
select json_strip_nulls('[1,{"a":1,"b":null,"c":2},3]');
|
||||
|
||||
-- an empty object is not null and should not be stripped
|
||||
select json_strip_nulls('{"a": {"b": null, "c": null}, "d": {} }');
|
||||
|
@ -542,3 +542,22 @@ SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'b';
|
||||
SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'c';
|
||||
SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'd';
|
||||
SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::jsonb ? 'e';
|
||||
|
||||
-- jsonb_strip_nulls
|
||||
|
||||
select jsonb_strip_nulls(null);
|
||||
|
||||
select jsonb_strip_nulls('1');
|
||||
|
||||
select jsonb_strip_nulls('"a string"');
|
||||
|
||||
select jsonb_strip_nulls('null');
|
||||
|
||||
select jsonb_strip_nulls('[1,2,null,3,4]');
|
||||
|
||||
select jsonb_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}');
|
||||
|
||||
select jsonb_strip_nulls('[1,{"a":1,"b":null,"c":2},3]');
|
||||
|
||||
-- an empty object is not null and should not be stripped
|
||||
select jsonb_strip_nulls('{"a": {"b": null, "c": null}, "d": {} }');
|
||||
|
Reference in New Issue
Block a user