Re: GSoC 2015: Extra Jsonb functionality - Mailing list pgsql-hackers

From Thom Brown
Subject Re: GSoC 2015: Extra Jsonb functionality
Date
Msg-id CAA-aLv4hTK6FjVK31Pc7BTUjrspHdxBtjHJNTQG0B3YFyhzAmQ@mail.gmail.com
Whole thread Raw
In response to Re: GSoC 2015: Extra Jsonb functionality  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Responses Re: GSoC 2015: Extra Jsonb functionality
List pgsql-hackers
On 19 March 2015 at 14:35, Alvaro Herrera <alvherre@2ndquadrant.com> wrote:
> Thom Brown wrote:
>> On 19 March 2015 at 14:12, Alvaro Herrera <alvherre@2ndquadrant.com> wrote:
>> > Dmitry Dolgov wrote:
>> >
>> >>     * jsonb_slice - extract a subset of an jsonb
>> >>       Example of usage:
>> >>
>> >>         =# jsonb_slice('{"a": 1, "b": {"c": 2}, "d": {"f": 3}}'::jsonb,
>> >> ARRAY['b', 'f', 'x']);
>> >>
>> >>                jsonb_slice
>> >>         ---------------------------
>> >>           {"b": {"c": 2}, "f": 3}
>> >
>> > This is a bit strange.  Why did "f" get flattened out of "d"?  Is the
>> > resulting document still valid for the purposes of an application using
>> > it?  I think I'd expect the result to be {"b": {"c": 2}, "d": {"f": 3}}
>>
>> Why would "d" be output when it wasn't in the requested slice?
>
> Because it contains "f".

Okay, so it pulls it all parents?  So I guess you'd get this too:

SELECT jsonb_slice('{"a": 1, "b": {"c": 2}, "d": {"f": 3}, "f":
4}'::jsonb, ARRAY['b', 'f', 'x']);
                 jsonb_slice
------------------------------------------------{"a": 1, "b": {"c": 2}, "d": {"f": 3}, "f": 4}

>> Although I'm still a bit confused about "f" being produced.
>
> I guess you could say that the second argument is an array of element
> paths, not key names.  So to get the result I suggest, you would have to
> use ARRAY['{b}', '{d,f}', '{x}'].  (Hm, this is a non-rectangular
> array actually... I guess I'd go for ARRAY['b', 'd//f', 'x'] instead, or
> whatever the convention is to specify a json path).

I think that's where jsquery would come in handy.
-- 
Thom



pgsql-hackers by date:

Previous
From: Tomas Vondra
Date:
Subject: Re: GSoC - Idea Discussion
Next
From: Alvaro Herrera
Date:
Subject: Re: GSoC 2015: Extra Jsonb functionality