如何将 sql-text 转换为 jsonb-string?
How to convert sql-text to jsonb-string?
似乎没有明显的方法:
select 'a123'::text::jsonb
= 错误:类型 json 的输入语法无效
select '"a123"'::text::jsonb
= 错误字符串 因为引用
检查select '"a123"'::text::jsonb = ('{"x":"a123"}'::jsonb)->'x'
以查看非-引用是正确的.
select '123'::text::jsonb = ('{"x":123}'::jsonb)->'x';
= 不是字符串
我需要 '123' 和 'a123' 作为 纯 JSONb 字符串。
PS:它不是 generic automatic-anything conversion 的副本。
要转换未类型化的 string literals, that are not wrapped in double-quotes to jsonb
(or json
), use the to_jsonb()
(或 to_json()
)函数:
SELECT to_jsonb(text 'a123');
请注意,输入必须是字符串类型(text
、varchar
、...),而不是无类型文字。这就是 Postgres 知道你想要一个 JSON string.
的方式
上面的 text 'a123'
是一种转换无类型文字的方法。还有其他的:
- Postgres data type cast
对于直接转换为 json(b)
,Postgres 需要有效的 JSON 文字(使用双引号 字符串 ):
SELECT '"a123"'::jsonb;
要将每个值转换为特定的 JSON 基元,您可以在转换之前有条件地进行转换。示例:
SELECT p, CASE WHEN i>2 THEN to_jsonb(p::numeric) ELSE to_jsonb(p) END AS x
FROM unnest('{ab,12,12,1.2}'::text[]) WITH ORDINALITY t(p,i);
select '"a123"'::text::jsonb
= BAD string because quoted
准确地说,结果不是一个字符串,而是一个包含JSON字符串的jsonb
值。要将字符串作为 Postgres 数据类型 text
,您需要 ->>
运算符:
select 'a123'::text = ('{"x":"a123"}'::jsonb)->>'x'
或(比较 JSON 个值):
select '"a123"'::jsonb = ('{"x":"a123"}'::jsonb)->'x';
I need '123' and 'a123' as pure JSONb strings.
所以:
SELECT '"123"'::jsonb, '"a123"'::jsonb;
两者都包含JSON字符串.
这也有效:
SELECT '123'::jsonb;
.. 但包含一个 JSON numeric.
但这不起作用:
SELECT 'a123'::jsonb; -- error
.. 因为它不是有效的数字文字。
之间有 table 个映射
似乎没有明显的方法:
select 'a123'::text::jsonb
= 错误:类型 json 的输入语法无效
select '"a123"'::text::jsonb
= 错误字符串 因为引用
检查select '"a123"'::text::jsonb = ('{"x":"a123"}'::jsonb)->'x'
以查看非-引用是正确的.select '123'::text::jsonb = ('{"x":123}'::jsonb)->'x';
= 不是字符串
我需要 '123' 和 'a123' 作为 纯 JSONb 字符串。
PS:它不是 generic automatic-anything conversion 的副本。
要转换未类型化的 string literals, that are not wrapped in double-quotes to jsonb
(or json
), use the to_jsonb()
(或 to_json()
)函数:
SELECT to_jsonb(text 'a123');
请注意,输入必须是字符串类型(text
、varchar
、...),而不是无类型文字。这就是 Postgres 知道你想要一个 JSON string.
上面的 text 'a123'
是一种转换无类型文字的方法。还有其他的:
- Postgres data type cast
对于直接转换为 json(b)
,Postgres 需要有效的 JSON 文字(使用双引号 字符串 ):
SELECT '"a123"'::jsonb;
要将每个值转换为特定的 JSON 基元,您可以在转换之前有条件地进行转换。示例:
SELECT p, CASE WHEN i>2 THEN to_jsonb(p::numeric) ELSE to_jsonb(p) END AS x
FROM unnest('{ab,12,12,1.2}'::text[]) WITH ORDINALITY t(p,i);
select '"a123"'::text::jsonb
= BAD string because quoted
准确地说,结果不是一个字符串,而是一个包含JSON字符串的jsonb
值。要将字符串作为 Postgres 数据类型 text
,您需要 ->>
运算符:
select 'a123'::text = ('{"x":"a123"}'::jsonb)->>'x'
或(比较 JSON 个值):
select '"a123"'::jsonb = ('{"x":"a123"}'::jsonb)->'x';
I need '123' and 'a123' as pure JSONb strings.
所以:
SELECT '"123"'::jsonb, '"a123"'::jsonb;
两者都包含JSON字符串.
这也有效:
SELECT '123'::jsonb;
.. 但包含一个 JSON numeric.
但这不起作用:
SELECT 'a123'::jsonb; -- error
.. 因为它不是有效的数字文字。
之间有 table 个映射