2016-12-02 21 views
1

postgresQLデータベースで定義されたjsonを返す関数があるとします。openresty upstream postgresそれ自身で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"} 
] 

さらにあなたがfollwoing設定ファイルでPostgresのnginxのモジュールを含むnginxの(openresty) を持っている:上rds_jsonで

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 ]"}] 

アン。私が正しくフォーマットされたJSONが、返される文字列の開始を受けて、いくつかの厄介な兆候で終了します。

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

することは、結果オブジェクトに追加の兆候を取り除くためのいずれか、またはすべての二重引用符をエスケープしていない方法はあります最初のケースでは?

ありがとうございました

答えて

0

私は理由を見つけました。実際それは簡単でした。 openrestyをjsonに出力する代わりに。私の質問でコミュニティを悩ませて申し訳ありません。 ヘッダーを正しく設定する必要がありました。

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; 
     } 
    } 
} 
関連する問題