Я установил pljson 1.05 в Oracle Xe 11g и написал функцию PLSQL для извлечения значений из возврата из экземпляров Amazon AWS-экземпляров.не может получить правильный синтаксис для pljson
Попытка получить значения для элементов верхнего уровня, таких как идентификатор резервирования, но я не могу получить значения, вложенные в нижние уровни json.
например. Этот пример работает (с использованием урезывание AWS JSON инлайн
DECLARE
reservations JSON_LIST;
l_tempobj JSON;
instance JSON;
L_id VARCHAR2(20);
BEGIN
obj:= json('{
"Reservations": [
{
"ReservationId": "r-5a33ea1a",
"Instances": [
{
"State": {
"Name": "stopped"
},
"InstanceId": "i-7e02503e"
}
]
},
{
"ReservationId": "r-e5930ea5",
"Instances": [
{
"State": {
"Name": "running"
},
"InstanceId": "i-77859692"
}
]
}
]
}');
reservations := json_list(obj.get('Reservations'));
l_tempobj := json(reservations);
DBMS_OUTPUT.PUT_LINE('============');
FOR i IN 1 .. l_tempobj.count
LOOP
DBMS_OUTPUT.PUT_LINE('------------');
instance := json(l_tempobj.get(i));
instance.print;
l_id := json_ext.get_string(instance, 'ReservationId');
DBMS_OUTPUT.PUT_LINE(i||'] Instance:'||l_id);
END LOOP;
END;
возвращающегося
============
------------
{
"ReservationId" : "r-5a33ea1a",
"Instances" : [{
"State" : {
"Name" : "stopped"
},
"InstanceId" : "i-7e02503e"
}]
}
1] Instance:r-5a33ea1a
------------
{
"ReservationId" : "r-e5930ea5",
"Instances" : [{
"State" : {
"Name" : "running"
},
"InstanceId" : "i-77859692"
}]
}
2] Instance:r-e5930ea5
, но этот пример, чтобы вернуть идентификатор экземпляра Doesnt
DECLARE
l_clob CLOB;
obj JSON;
reservations JSON_LIST;
l_tempobj JSON;
instance JSON;
L_id VARCHAR2(20);
BEGIN
obj:= json('{
"Reservations": [
{
"ReservationId": "r-5a33ea1a",
"Instances": [
{
"State": {
"Name": "stopped"
},
"InstanceId": "i-7e02503e"
}
]
},
{
"ReservationId": "r-e5930ea5",
"Instances": [
{
"State": {
"Name": "running"
},
"InstanceId": "i-77859692"
}
]
}
]
}');
reservations := json_list(obj.get('Reservations'));
l_tempobj := json(reservations);
DBMS_OUTPUT.PUT_LINE('============');
FOR i IN 1 .. l_tempobj.count
LOOP
DBMS_OUTPUT.PUT_LINE('------------');
instance := json(l_tempobj.get(i));
instance.print;
l_id := json_ext.get_string(instance, 'Instances.InstanceId');
DBMS_OUTPUT.PUT_LINE(i||'] Instance:'||l_id);
END LOOP;
END;
возвращающиеся
============
------------
{
"ReservationId" : "r-5a33ea1a",
"Instances" : [{
"State" : {
"Name" : "stopped"
},
"InstanceId" : "i-7e02503e"
}]
}
1] Instance:
------------
{
"ReservationId" : "r-e5930ea5",
"Instances" : [{
"State" : {
"Name" : "running"
},
"InstanceId" : "i-77859692"
}]
}
2] Instance:
только с Первый пример второй заменяет «ReservationId» на «Instances.InstanceId», но во втором примере, хотя функция завершается успешно, и оператор instance.print выводит полный json, этот код не заполняет идентификатор экземпляра в l_id, вывода на DBMS_OUTPUT.
Я также получаю тот же результат (т. Е. Нет значения в L_id), если я просто использую «InstanceId».
Мое предположение и чтение примеров, предложенных JSON PATH, должны позволять мне выбирать значения, используя либо точечную нотацию для вложенных значений, но она, похоже, не работает. Я также попытался извлечь «экземпляры» в временную переменную, если тип JSON_LIST, а затем доступ к ней оттуда, но также не смог получить рабочий пример.
Любая помощь приветствуется. Большое спасибо.
Да, нам нужно собрать этот материал в документации.Если вы готовы помочь - github.com/pljson/pljson –