从PostgreSQL中的函数返回中删除双引号

Leo*_*Leo 32 database postgresql json function

我在PostgreSQL中有以下功能

CREATE OR REPLACE FUNCTION public.translatejson(JSONB, TEXT)
RETURNS TEXT
AS
$BODY$
   SELECT ($1->$2)::TEXT
$BODY$
LANGUAGE sql STABLE;
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我收到双引号括起来的值.例如:

SELECT id, translatejson("title", 'en-US') AS "tname" FROM types."FuelTypes";

作为回报,我得到一张这样的桌子

-------------------
| id | tname      |
-------------------
| 1  | "gasoline" |
| 2  | "diesel"   |
-------------------
Run Code Online (Sandbox Code Playgroud)

"标题"列中的值采用JSON格式:{"en-US":"汽油","fr-FR":"精华"}.我如何省略双引号只返回结果的字符串?

Cra*_*ger 78

->运算符返回一个json结果.将它投射到textjson reprsentation中.

->>运算符返回一个text结果.改用它.

test=> SELECT '{"car": "going"}'::jsonb -> 'car';
 ?column? 
----------
 "going"
(1 row)

test=> SELECT '{"car": "going"}'::jsonb ->> 'car';
 ?column? 
----------
 going
(1 row)
Run Code Online (Sandbox Code Playgroud)

  • @Shersh你可以使用:json_array_elements_text(json)或者jsonb_array_elements_text(jsonb) (5认同)
  • 优秀的答案! (3认同)
  • 你拯救了这一天。 (2认同)
  • 您不应该使用 `->>` 将字符串数组转换为文本。像这样使用`#>>``'{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}'` . 这是来自 [postgres 网络文档](https://www.postgresql.org/docs/9.3/static/functions-json.html) (2认同)
  • 谢谢!我不知道所有这些运算符和函数。`json_array_elements_text` 非常适合我! (2认同)