我有一个JSON,它带有单引号,用于其中一个字段,如下所示。将创建以 JSON 作为输入参数的函数,并直接从应用程序调用。至少如果将其读入函数,我会使用regexp_replace。
例如:
select '{
"phrase": "foo",
"phrase_1": "'bar'"
}' :: json
syntax error at or near "'"
}'"
LINE 3: "phrase_1": "'bar'"
此输出是一个错误。 所以我的实际问题是这个 JSON 直接读入我的函数。
create or replace function f_n(in json) -- it is failing to read here
returns text
---
---
end;
$$
那么我可以在这里做些什么来避免 PostgreSQL 中的此类问题呢?
单引号在 SQL 中需要重复才能转义:
select '{
"phrase": "foo",
"phrase_1": "''bar''"
}'::json;
或者使用Postgres的美元报价来避免这种情况:
select $j${
"phrase": "foo",
"phrase_1": "'bar'"
}$j$::json;
当将其作为参数传递给函数时,其工作原理相同:
select f_n('{
"phrase": "foo",
"phrase_1": "''bar''"
}'::json);
或
select f_n($j${
"phrase": "foo",
"phrase_1": "'bar'"
}$j$::json);