gpt4 book ai didi

json - openresty 上游 postgres 调用一个函数,它自己返回一个 json

转载 作者:行者123 更新时间:2023-11-29 13:51:13 26 4
gpt4 key购买 nike

假设您有一个返回 postgresQL 数据库中定义的 json 的函数。

CREATE OR REPLACE FUNCTION test() RETURNS JSON AS $$
SELECT
'[
{"fName":"John","lName":"Doe"},
{"fName":"Jane","lName":"Doe"}
]'::JSON;
$$
LANGUAGE SQL STRICT IMMUTABLE;


SELECT test();
-------------------------------------
[
{"fName":"John","lName":"Doe"},
{"fName":"Jane","lName":"Doe"}
]

此外,您还有一个 Nginx,包括 Postgres Nginx 模块 (openresty)使用以下配置文件:

worker_processes  1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {

upstream database {
postgres_server localhost dbname=example user=postgres;
postgres_keepalive max=200 overflow=reject;
}

server {
listen 8080;
location /test/ {
postgres_pass database;
rds_json on;
postgres_query HEAD GET "SELECT test()";
postgres_rewrite HEAD GET no_rows 410;
}
}
}

启用 rds_json; 输出中的所有引号都已转义,如下所示:

curl http://localhost:8080/test/
[{"test":"[\n {\"fName\":\"John\",\"lName\":\"Doe\"},\n {\"fName\":\"Jane\",\"lName\":\"Doe\"}\n ]"}]

如果我关闭 rds_json; 我会收到一个格式正确的 json,但返回的字符串以一些笨拙的符号开头和结尾:

@^C^@^@^@^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@<80>r^@^D^@test^AL^@^@^@[
{"fName":"John","lName":"Doe"},
{"fName":"Jane","lName":"Doe"}
]^@

有没有办法在第一种情况下去掉结果对象中的附加符号或不转义所有双引号?

谢谢

最佳答案

我找到了一个原因。实际上这是微不足道的。无需将 openresty 格式输出为 json,只需从配置中删除 rds_json on; 即可,一切正常。很抱歉用我的问题打扰社区。我必须正确设置 header :

worker_processes  1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {

upstream database {
postgres_server localhost dbname=example user=postgres;
postgres_keepalive max=200 overflow=reject;
}

server {
listen 8080;
location /test/ {
postgres_pass database;
postgres_query HEAD GET "SELECT test()";
more_set_headers 'Content-Type: application/json';
postgres_rewrite HEAD GET no_rows 410;
}
}
}

关于json - openresty 上游 postgres 调用一个函数,它自己返回一个 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40934081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com