Max*_*mov 16 postgresql json string-representation postgresql-10
SELECT json_array_elements('["one", "two"]'::json)
Run Code Online (Sandbox Code Playgroud)
给出结果
| json_array_elements | | :------------------ | | “一个” | | “两个” |
我想要相同但没有引号:
one
two
Run Code Online (Sandbox Code Playgroud)
看起来我不能->>
在这里使用,因为我在 JSON 中没有字段名称。它只是一个字符串数组。
Postgres 版本:PostgreSQL 10.0 on x86_64-apple-darwin,由 i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (基于 Apple Inc. build 5658) (LLVM build 2336.11.00) 编译,64-少量
小智 22
SELECT value#>>'{}' as col FROM json_array_elements('["one", "two"]'::json);
Run Code Online (Sandbox Code Playgroud)
结果:
col
---
one
two
Run Code Online (Sandbox Code Playgroud)
Eva*_*oll 14
默认json->text
强制输出带有双引号 ( "
),因为从 强制text
转换为json
字符串需要您将输入用双引号引起来。要摆脱双引号,请使用TRIM
SELECT x, trim('"' FROM x::text)
FROM json_array_elements('["one", "two"]'::json) AS t(x);
x | btrim
-------+-------
"one" | one
"two" | two
(2 rows)
Run Code Online (Sandbox Code Playgroud)
重要的一点是,如果你这样做,你会失去一些效用。所有JSONB类型获得可用于返回到一个文本形式返回jsonb
与text->jsonb
强制。这是一个双射映射函数。失去这意味着null
和"null"
是一样的,就像1
和 一样"1"
。
SELECT x, trim('"' FROM x::text)
FROM json_array_elements('[null, "null", 1, "1"]') AS t(x);
x | btrim
--------+-------
null | null
"null" | null
1 | 1
"1" | 1
(4 rows)
Run Code Online (Sandbox Code Playgroud)
如果你想知道发生了什么。所有类型都可以提供一个_out
将它们带入text
或_send
将它们带入二进制表示和倒数_in
以及_recv
将它们从这些形式中提取出来并映射回类型的方法。在这里你得到jsonb_out
,
jsonb_out
其中调用JsonbToCstring
JsonbToCstring
其中调用JsonbToCStringWorker
JsonbToCStringWorker
其中调用jsonb_put_escaped_value
jsonb_put_escaped_value(StringInfo out, JsonbValue *scalarVal)
其中调用escape_json
escape_json(StringInfo buf, const char *str)
它添加了"
并且它是硬编码的。没有其它的方法。小智 14
SELECT json_array_elements_text('["one", "two"]'::json)
Run Code Online (Sandbox Code Playgroud)
如果使用 jsonb 代替:
SELECT jsonb_array_elements_text('["one", "two"]'::jsonb)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19791 次 |
最近记录: |