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
那么,怎么做铸造?
答案 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
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的一大差距。