row_to_json和有不同的格式json_build_object。
對于row_to_json輸入是:
select ... <table.field> "<json_key"
對于json_build_object:
"<json_key" , <table.field>
這讓我很驚訝。Oracle 使用具有相似輸入的相似 JSON 函式。這可能看起來像一件小事,但它讓我更難自動生成SELECT復雜/嵌套結構的陳述句。
考慮這個簡單的例子:
CREATE TABLE "users" (
id SERIAL NOT NULL,
name VARCHAR(100),
email_address VARCHAR(150),
PRIMARY KEY(id)
);
INSERT INTO "users" ("id", "name", "email_address")
VALUES (1, 'user1', '[email protected]'), (2, 'user2', '[email protected]');
要獲取電子郵件和電子郵件是字典物件的名稱:
"{""user_name"":""user1"",""email"":{""email_address"" : ""[email protected]""}}"
查詢將是:
select row_to_json(users) from
(select users.name "user_name" ,
(json_build_object( 'email_address' , users.email_address )) email
from users ) users;
我想在這兩種情況下使用相同的欄位順序。輸入將是:
<table.field> "<json_key" OR "<json_key" <table.field>
我嘗試使用“AS”翻轉訂單,但它不起作用:
select row_to_json(users) from
(select users.name "user_name" ,
(json_build_object( users.email_address as 'email_address' )) email
from users ) users;
也許只 row_to_json()使用or json_build_object()?還是別的什么?(但沒有left join。)
uj5u.com熱心網友回復:
row_to_json將整個行元組(一條記錄)作為輸入,例如從子查詢中獲取它。如果您不使用這些,或者不喜歡row_to_json,請不要使用它。如果您使用SELECT *并且不想指定列/欄位名稱,這主要是一種方便。
我建議使用json_build_object顯式欄位名稱,特別是如果您想重命名它們。您的查詢可以而且應該寫成
SELECT json_build_object(
'user_name', users.name,
'email', json_build_object(
'email_address', users.email_address
)
) AS json_result
FROM users;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/411512.html
標籤:
上一篇:“with”子句表的內連接結果
下一篇:計數不重復
