Re: GSoC 2015: Extra Jsonb functionality
От | Thom Brown |
---|---|
Тема | Re: GSoC 2015: Extra Jsonb functionality |
Дата | |
Msg-id | CAA-aLv4hTK6FjVK31Pc7BTUjrspHdxBtjHJNTQG0B3YFyhzAmQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: GSoC 2015: Extra Jsonb functionality (Alvaro Herrera <alvherre@2ndquadrant.com>) |
Ответы |
Re: GSoC 2015: Extra Jsonb functionality
|
Список | 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 по дате отправления: