2016-09-29 4 views
0

Поскольку я пишу, есть что-то, что я не могу понять. У меня есть следующие данные объекта JSON с отступом. Я хотел бы получить значения, связанные с «отраслью» и «обмен» для каждого «ответа» в PL/SQL в Oracle 12. Я установил пакет JSON, найденный на форуме https://github.com/pljson/pljson. Все решение, которое я нашел, не было отступом, поэтому я не уверен, является ли это причиной, потому что вы не можете получить доступ к этой информации. Любое предложение или статья, которые могли бы мне помочь, были бы весьма признательны. Спасибо заранее.PL/SQL с JSON (список объектов) разбор

Это моя JSON строка

{ 
    "response":{ 
     "MSFT":{ 
     "meta":{ 
      "status":"ok" 
     }, 
     "results":{ 
      "industry":{ 
       "data":"Software - Infrastructure", 
       "meta":{ 
        "status":"ok" 
       } 
      }, 
      "exchange":{ 
       "data":"NASDAQ", 
       "meta":{ 
        "status":"ok" 
       } 
      } 
     } 
     }, 
     "AAPL":{ 
     "meta":{ 
      "status":"ok" 
     }, 
     "results":{ 
      "industry":{ 
       "data":"Consumer Electronics", 
       "meta":{ 
        "status":"ok" 
       } 
      }, 
      "exchange":{ 
       "data":"NASDAQ", 
       "meta":{ 
        "status":"ok" 
       } 
      } 
     } 
     } 
    }, 
    "meta":{ 
     "status":"ok", 
     "url":"http://testdata.com/api/v3/companies/AAPL,MSFT/info/exchange,industry" 
    } 
} 

Это модифицированный пример кода, который я нашел на форуме базы по этой ссылке

Parse JSON into Oracle table using PL/SQL

create or replace procedure json4(w_periode in varchar2) is 
begin 
    DECLARE 
l_param_list  VARCHAR2(512); 
l_http_request UTL_HTTP.req; 
l_http_response UTL_HTTP.resp; 
l_response_text VARCHAR2(32767); 
l_list json_list; 
obj json := json(); 
arr json_list := json_list(); 


BEGIN 
-- service's input parameters 
-- ...set input parameters 
-- UTL_HTTP.write_text(l_http_request, l_param_list); 
l_response_text := '{"response": {"MSFT": {"meta": {"status": "ok"}, "results": {"industry": {"data": "Software - Infrastructure", "meta": {"status": "ok"}}, "exchange": {"data": "NASDAQ", "meta": {"status": "ok"}}}}, "AAPL": {"meta": {"status": "ok"}, "results": {"industry": {"data": "Consumer Electronics", "meta": {"status": "ok"}}, "exchange": {"data": "NASDAQ", "meta": {"status": "ok"}}}}}, "meta": {"status": "ok", "url": "http://testurl.com"}}'; 

/* -- get Response and obtain received value 
    l_http_response := UTL_HTTP.get_response(l_http_request);*/ 

/* UTL_HTTP.read_text(l_http_response, l_response_text); 
    */ 
    obj := json(l_response_text); 



    DBMS_OUTPUT.put_line(l_response_text); 
/* l_list := json_list(l_response_text);*/ 
/*arr := json_list(obj.get('industry'));*/ 

end; 
end json4; 
+0

посмотрите на ссылку ниже http://stackoverflow.com/questions/27122612/parse-json-into-oracle-table-using-pl-sql –

+0

Это точно такая же связь Я задал свой вопрос. Кажется, нужно обрабатывать массив, а не список объектов. –

ответ

0

Я нашел решение. Ссылка в сообщении должна быть скобкой в ​​виде массива. В моем varchar2 мне пришлось вставить символ «[» в начале и в конце. Проблема в том, что он будет анализировать только JSON, если он не будет отступом, из моего понимания.

Затем я устанавливаю пакет APEX5, он умеет обрабатывать отступы. Я следую процедуре установки https://www.youtube.com/watch?v=JGnkPVq7V98 и с первой попытки работает отлично.

Надежда эта помощь

Смежные вопросы