Re: mogrify and indent features for jsonb - Mailing list pgsql-hackers

From Thom Brown
Subject Re: mogrify and indent features for jsonb
Date
Msg-id CAA-aLv5GmXE6w8zZj_P-h0pkdD99ZE=3=N=OWFJ+Mnc0EgxUbw@mail.gmail.com
Whole thread Raw
In response to mogrify and indent features for jsonb  (Andrew Dunstan <andrew@dunslane.net>)
List pgsql-hackers
On 15 February 2015 at 03:06, Andrew Dunstan <andrew@dunslane.net> wrote:

Attached is a patch to provide a number of very useful facilities to jsonb that people have asked for. These are based on work by Dmitry Dolgov in his jsonbx extension, but I take responsibility for any bugs.

The facilities are:

new operations:

concatenation:    jsonb || jsonb -> jsonb
deletion:         jsonb - text -> jsonb
deletion:         jsonb - int -> text

new functions:

produce indented text: jsonb_indent(jsonb) -> text
change an element at a path:  jsonb_replace(jsonb, text[], jsonb) -> jsonb.


It would be relatively trivial to add:

delete an element at a path: jsonb_delete(jsonb, text[]) -> json

Would this support deleting "type" and the value 'dd' from the following?:

{"a": 1, "b": 2, "c": {"type": "json", "stuff": "test"}, "d": ["aa","bb","cc","dd"]}
 

and I think we should do that for the sake of completeness.

The docs might need a little extra work, and the indent code definitely needs work, which I hope to complete in the next day or two, but I wanted to put a stake in the ground.

This is high on my wanted list, so thanks for working on this.

Seems to work well for me with a few tests.

Is there a way to take the json:

'{"a": 1, "b": 2, "c": {"type": "json", "stuff": "test"}, "d": ["aa","bb","cc","dd"]}'

and add "ee" to "d" without replacing it?  I can think of ways of currently doing it, but it's very convoluted just for pushing a value to an array.

Also, are there any plans to support the following?:

jsonb - text[] # Provide list of keys to delete in array
jsonb - jsonb # Deduplicate key:value pairs
jsonb && jsonb # Return overlapping jsonb (opposite of jsonb - jsonb)

Thanks

Thom

pgsql-hackers by date:

Previous
From: Henry B Hotz
Date:
Subject: Re: SSL renegotiation
Next
From: Heikki Linnakangas
Date:
Subject: Re: [RFC] LSN Map