#json #oracle #plsql
Вопрос:
У меня есть json_object_t
тип, который выглядит следующим образом.
v_input_data := new JSON_OBJECT({
"REQS": { "INDICATOR": "Y",
"NUMBER": 0,
"CATEGORY": "TU",
"ID_R": 10888,
"SUPPL_VAL": 0,
"line_itemssub": {
"QTY": 0,
"TOTAL_QTY": 1,
"PIPE": {
"P_CODE": 9801,
"P_ID": 7500030,
"CC_CODE": "C6AJG4"
}
}
},
"Name":"Rajesh",
"Age":47
});
v_input_data.get_keys
дает мне только 3 значения REQS
, Name
amp; Age
.
Но я хочу, чтобы ключи также присутствовали во вложенных объектах. Как я могу этого достичь ?
Заранее спасибо.
Комментарии:
1. Вы можете перейти по этой ссылке — asktom.oracle.com/pls/apex/…
Ответ №1:
PL/SQL
SET SERVEROUTPUT ON;
DECLARE
PROCEDURE json_keys (p_object IN JSON_OBJECT_T) IS
v_object JSON_OBJECT_T;
v_keys JSON_KEY_LIST;
v_key VARCHAR2(4000);
BEGIN
v_keys := p_object.get_keys;
FOR i IN v_keys.FIRST..v_keys.LAST LOOP
v_key := v_keys(i);
dbms_output.put_line(v_key);
IF p_object.get(v_key).is_object THEN
v_object := new JSON_OBJECT_T(p_object.get(v_key));
json_keys(v_object);
END IF;
END LOOP;
END json_keys;
BEGIN
json_keys(new JSON_OBJECT_T('{
"REQS": {
"INDICATOR": "Y",
"NUMBER": 0,
"CATEGORY": "TU",
"ID_R": 10888,
"SUPPL_VAL": 0,
"LINE_ITEMSSUB": {
"QTY": 0,
"TOTAL_QTY": 1,
"PIPE": {
"P_CODE": 9801,
"P_ID": 7500030,
"CC_CODE": "C6AJG4"
}
}
},
"Name": "Rajesh",
"Age": 47
}'));
END;
Выход
REQS
INDICATOR
NUMBER
CATEGORY
ID_R
SUPPL_VAL
LINE_ITEMSSUB
QTY
TOTAL_QTY
PIPE
P_CODE
P_ID
CC_CODE
Name
Age
PL/SQL procedure successfully completed.
Комментарии:
1. Это работает. Хорошая идея использовать рекурсию. Спасибо!