我想在JSON_QUERY中動態地獲得鍵名
我想在JSON_QUERY中動態地獲得鍵名
SELECT JSON_QUERY('{a: 100, b:200, c:300}'/span>, '$. *' WITH WRAPPER) AS value
FROM DUAL;
VALUE[/span
--------------------------------------------------------------------------------
[100,200, 300]
預期的關鍵串列,如:
[a,b,c]。
uj5u.com熱心網友回復:
我想在
中動態地獲得鍵名。JSON_QUERY
你不能,SQL的JSON函式(目前)沒有任何功能可以從JSON物件中獲取鍵名。
但是,你可以在一個函式中使用PL/SQL JSON物件來實作它(來自我之前的回答):
CREATE FUNCTION get_keys(
value IN CLOB
) RETURN SYS.ODCIVARCHAR2LIST PIPELINED
IS
js JSON_OBJECT_T := JSON_OBJECT_T( value ) 。
鍵入JSON_KEY_LIST。
BEGIN
keys := js.get_keys();
FOR i in 1 ... keys.COUNT LOOP
PIPE ROW ( keys(i) ) 。
END LOOP;
END;
/
其中,對于示例資料:
CREATE TABLE table_name ( value VARCHAR2(4000) CHECK (value IS JSON) ) 。
INSERT INTO table_name (value) VALUES ('{a:100, b:200, c:300}'/span>) 。
然后,你可以在查詢中使用該函式:
SELECT t.value,
k.key
FROM table_name t
CROSS JOIN LATERAL (
SELECT ' ['
|| LISTAGG(COLUMN_VALUE, ' 。 ') WITHIN GROUP ( ORDER BY ROWNUM)
|| '] '
AS keys
FROM TABLE(get_keys(t.value)
) k;
其中輸出:
VALUE KEYS {a:100, b:200, c:300}? [a,b,c]/td>
db<>fiddle here
uj5u.com熱心網友回復:
為什么要在JSON_QUERY中動態地獲取鍵名?這毫無意義。
你想動態地獲得鍵名。這就是問題的陳述。"在JSON_QUERY中 "是你對如何獲得鍵的想法。這個想法是錯誤的。
但是你可以通過JSON_DATAGUIDE函式來動態地獲得鍵名,以及更多。然后你可以進一步處理輸出,如果需要的話;只是JSON_DATAGUIDE本身給你更多的資訊:鍵名,但也有資料型別和長度 - 而且它也適用于復雜的JSON字串(有嵌套物件和陣列)。
select json_dataguide('{a:100, b:200, c:300}'/span>)
from dual;
JSON_DATAGUIDE('{A:100,B:200,C:300}'/span>)
--------------------------------------------------------------------------------
[{"o:path":"$.a", "type": "number", "o:length":4},{"o:path":"$.b", "type": "number","
o:length":4},{"o:path":"$.c", "type": "number", "o:length":4}]
當然,如果你只想要一個頂層鍵的陣列,你可以進一步處理這個JSON陣列;我不展示如何處理,因為你可能自己就能做到(微不足道的操作),但如果需要的話,請尋求幫助。
注意,上述內容在 Oracle 12.2 及以上版本中有效。如果需要的話,從 Oracle 18 開始,你可以使用額外的選項來格式化輸出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308112.html
標籤:
