저는 Oracle XE 11g에 pljson 1.05를 설치했으며 Amazon AWS describe-instances에서 반환 된 값을 추출하는 PLSQL 함수를 작성했습니다.은 pljson에 대한 올바른 구문을 얻을 수 없습니다.
예약 ID 작업과 같은 최상위 항목에 대한 값을 얻으려고 시도하지만 json의 하위 수준에 중첩 된 값을 가져올 수 없습니다.
이 예
============
------------
{
"ReservationId" : "r-5a33ea1a",
"Instances" : [{
"State" : {
"Name" : "stopped"
},
"InstanceId" : "i-7e02503e"
}]
}
1] Instance:
------------
{
"ReservationId" : "r-e5930ea5",
"Instances" : [{
"State" : {
"Name" : "running"
},
"InstanceId" : "i-77859692"
}]
}
2] Instance:
복귀 인스턴스 ID 그다지
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:r-5a33ea1a
------------
{
"ReservationId" : "r-e5930ea5",
"Instances" : [{
"State" : {
"Name" : "running"
},
"InstanceId" : "i-77859692"
}]
}
2] Instance:r-e5930ea5
복귀 cutdown 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;
그러나이 예를 이용하여 (작동 th에서만 변화하다 첫 번째 예제에서 두 번째 예제는 'ReservationId'를 'Instances.InstanceId'로 바꾸고 있지만 두 번째 예제에서는 함수가 성공하고 instance.print 문이 전체 json을 출력하지만이 코드는 인스턴스 ID를 l_id에 채우지 않습니다. DBMS_OUTPUT의 출력.
'InstanceId'를 사용하는 경우에도 동일한 결과 (즉, L_id에는 값 없음)가 표시됩니다.
내 가정과 예제를 읽는 것이 좋습니다. JSON PATH는 중첩 된 값에 대해 점 표기법을 사용하여 값을 선택하도록 허용해야하지만 작동하지 않는 것 같습니다. JSON_LIST를 입력 한 다음 임시 변수에 'Instances'를 추출해 보았습니다. 그런 다음 JSON_LIST에 액세스하고 거기에서 액세스했지만 작동 예제도 얻을 수 없었습니다.
도움을 주시면 감사하겠습니다. 많은 감사.
예, 문서에서이 항목을 정렬해야합니다.도움이 필요하면 github.com/pljson/pljson –