Re: new json funcs

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: new json funcs
Дата
Msg-id 20140128182240.GU10723@eldon.alvh.no-ip.org
обсуждение исходный текст
Ответ на Re: new json funcs  (Josh Berkus <josh@agliodbs.com>)
Ответы Re: new json funcs  (Andrew Dunstan <andrew@dunslane.net>)
Список pgsql-hackers
Josh Berkus wrote:
> On 01/27/2014 01:06 PM, Alvaro Herrera wrote:
> > Andrew Dunstan escribió:
> > 
> >> I'm not sure I understand the need. This is the difference between
> >> the _text variants and their parents. Why would you call
> >> json_object_field when you want the dequoted text?
> > 
> > Because I first need to know its type.  Sometimes it's an array, or an
> > object, or a boolean, and for those I won't call the _text version
> > afterwards but just use the original.
> 
> It would make more sense to extract them as JSON, check the type, and
> convert.

That's what I'm already doing.  My question is how do I convert it?
I have this, but would like to get rid of it:

/** dequote_jsonval*        Take a string value extracted from a JSON object, and return a copy of it*        with the
quotingremoved.** Another alternative to this would be to run the extraction routine again,* using the "_text" variant
whichreturns the value without quotes; but this* complicates the logic a lot because not all values are extracted in*
thesame way (some are extracted using json_object_field, others* using json_array_element).  Dequoting the object
alreadyat hand is a* lot easier.*/
 
static char *
dequote_jsonval(char *jsonval)
{char   *result;int        inputlen = strlen(jsonval);int        i;int        j = 0;
result = palloc(strlen(jsonval) + 1);
/* skip the start and end quotes right away */for (i = 1; i < inputlen - 1; i++){    /*     * XXX this skips the \ in a
\"sequence but leaves other escaped     * sequences in place.  Are there other cases we need to handle     * specially?
   */    if (jsonval[i] == '\\' &&        jsonval[i + 1] == '"')    {        i++;        continue;    }
 
    result[j++] = jsonval[i];}result[j] = '\0';
return result;
}

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jeff Janes
Дата:
Сообщение: Weird error messages from Windows upon client death
Следующее
От: Merlin Moncure
Дата:
Сообщение: Re: jsonb and nested hstore