Re: JSON NULLs

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Yeb Havinga <yebhavinga(at)gmail(dot)com>
Cc: PostgreSQL-development Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: JSON NULLs
Date: 2013-02-10 15:03:40
Message-ID: 5117B6CC.4020502@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


On 02/10/2013 05:43 AM, Yeb Havinga wrote:
> On 2013-02-08 15:15, Andrew Dunstan wrote:
>>
>>
>>
>> Revised patch attached. The problem also existed with the
>> get*_as_text functions (and their operators). Some additional
>> regression tests are added to test these cases.
>
> Hi,
>
> I did some minor things with the patch today.
>
> 1. thanks for the work on the json type, great to see it in Postgres
> and also more functions on it!
>
> 2.
> during compile on
>
> jsonfuncs.c: In function `each_object_field_end':
> jsonfuncs.c:1151:13: warning: assignment makes integer from pointer
> without a cast

Thanks, I have fixed this in my code, and it will be included in the
next patch I post.

>
>
>
> 3. I was wondering how to access the first author from this json snippet:
>
> {
> "id": "QZr82w_eSi8C",
> "etag": "KZ+JsrkCdqw",
> "volumeInfo": {
> "title": "Heads Up Software Construction",
> "authors": [
> "Dan Malone",
> "Dave Riles"
> ],
>
>
> and played a bit with json_get_path_as_text(document, 'volumeInfo',
> 'authors') that accepts a list of keys as arguments. Have you thought
> about an implementation that would accept a single path argument like
> 'volumeInfo.authors[0]' ? This might be more powerful and easy to use,
> since the user does not need to call another function to get the first
> element from the author array, and the function call does not need to
> be changed when path lenghts change.

try:

json_get_path_as_text(document, 'volumeInfo', 'authors', '0')

There are other ways to spell this, too:

json_get_path_as_text(document, variadic
'{volumeInfo,authors,0}'::text[])

or

document->>'{volumeInfo,authors,0}'::text[]

I'm actually wondering if we should use different operator names for the
get_path*op functions so we wouldn't need to type qualify the path
argument. Maybe ?> and ?>> although I'm reluctant to use ? in an
operator given the recent JDBC discussion. Or perhaps #> and #>>.

cheers

andrew

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2013-02-10 15:09:19 Re: Department of Redundancy Department: makeNode(FuncCall) division
Previous Message Pavel Stehule 2013-02-10 12:37:07 Re: Re: proposal: a width specification for s specifier (format function), fix behave when positional and ordered placeholders are used