如何将JSON值转换为其对应的数据类型?

时间:2017-11-12 13:03:57

标签: postgresql jsonb

JSON-string是SQL-text,JSON-number是SQL-numeric,JSON-boolean是SQL-boolean ...所以我可以做"真正好的演员" ...但是:

SELECT to_jsonb('hello'::text)::text

不好。返回引号。最坏的情况:

SELECT to_jsonb(1::int)::int;
-- ERROR:  cannot cast type jsonb to integer

那么,怎么做铸造?

1 个答案:

答案 0 :(得分:0)

只有丑陋的方式......

今天PostgreSQL对JSON并不那么认真......所以,让我们来解决。

很抱歉有问题(mine!)和答案。 most simple solution is this one的答案:

  

在pg v9.4.4中使用#>>运算符对我有效:select to_json('test'::text)#>>'{}';

所以,使用问题的例子:

SELECT (to_json(1::int)#>>'{}')::int;  -- the cast works

JSONb问题......内部二进制值被重用了?

SELECT (to_jsonB(10.7::numeric)#>>'{}')::numeric; -- internal repres. preserved? 
SELECT (to_jsonB(10.7::float)#>>'{}')::float; -- internal repres. preserved? 
 -- internal JSONb was float or numeric?
SELECT (to_jsonB(true)#>>'{}')::boolean;  -- internal representation preserved?

... 无保证 PostgreSQL的内部解析器正在做正确的事情,重用JSONb的内部数字表示以避免CPU时间消耗(将jsonb-number转换为SQL-text,将文本转换为SQL-number)。

" JSONb演员优化"或" SQL数据类型/ JSONb数据类型convertion optionmization"似乎仍然是PostgreSQL的一大差距。