Postgres的:如何将JSONstring转换为文本?

Json值可能由一个sting值组成。 例如

postgres=# SELECT to_json('Some "text"'::TEXT); to_json ----------------- "Some \"text\"" 

我怎样才能提取该string作为postgres文本值?

::TEXT不起作用。 它返回引用的JSON,而不是原始string:

 postgres=# SELECT to_json('Some "text"'::TEXT)::TEXT; to_json ----------------- "Some \"text\"" 

谢谢。

PS我是美国PostgreSQL 9.3

PostgreSQL无法解构标量JSON对象。 因此,正如你所指出的那样,

select length(to_json('Some "text"'::TEXT) ::TEXT);

是15,

诀窍是将JSON转换为一个JSON元素的数组,然后使用->>提取该元素。

select length( array_to_json(array[to_json('Some "text"'::TEXT)])->>0 );

将返回11。

在9.4.4中使用#>>操作符适用于我:

select to_json('test'::text)#>>'{}';

一个简单的方法来做到这一点:

SELECT ('[' || to_json('Some "text"'::TEXT) || ']')::json ->> 0;

只需将jsonstring转换为json列表

这个问题/解决scheme产生了另一个问题… PostgreSQL开发人员的清单:
为什么将JSONstring转换SQL文本需要引号?
哦,有一些dillema …为什么不问用户他们喜欢什么?

在SQL中,强制char(N)生成没有引号的预期文本 ; 在embedded式语言或驱动程序中,投射SQL 文本产生预期的没有引号的string数据types,投射string产生预期的没有引号的SQL 文本 …这是普遍的预期行为…