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 文本 …这是普遍的预期行为…