Итак, у меня есть этот API, который сообщает мне список json_, и моя программа помещает его в объект json, который я не могу изменить. Мне нужно извлечь из него информацию, но я не могу.
Мой json файл:
[{ "idSolic" : "1234",
"Status" : {
"code" : "502",
"description" : "i cant get the data"
}
}]
Если бы я только мог удалить [], я бы смог его получить.
Я просыпаюсь с pl / sql с использованием json объектов из Документация GitHub
Я работаю с PL / JSON V1_0_5 и oracle 12 c.
Мой код:
FUNCTION GET_INVOICE_STATUS( p_chave_tabela apps.json
, p_company VARCHAR2
, p_invoice VARCHAR2
, p_resp_json OUT json
, p_id_solicitacao OUT NUMBER)
RETURN VARCHAR2
IS
PRAGMA AUTONOMOUS_TRANSACTION;
--
l_authorization VARCHAR2(4096);
l_status_solicitacao VARCHAR2(2048);
l_nome_processo VARCHAR2(100) := 'invoices/sefaz';
l_request utl_http.req;
l_response utl_http.resp;
l_host VARCHAR2(1024);
l_chave_tabela_clob CLOB := empty_clob();
l_clob_raw CLOB := empty_clob();
l_id_solicitacao NUMBER;
l_resp_list apps.json_list;
--
BEGIN
--
xxavl_util_pkg.inicia_host_token(p_host => l_host, p_token => l_authorization);
--
--l_authorization := 'Bearer ' || l_authorization;
l_host := l_host || l_nome_processo || '/' || trim(p_invoice) ;
--l_host || l_nome_processo || '/' ||p_invoice ;
--
dbms_output.put_line(l_host);
--
dbms_output.put_line(xxavl_util_pkg.g_autenticacao_padrao);
utl_http.set_wallet('file:/home/oracle/wallet','NULL');
--
l_request := utl_http.begin_request(l_host, 'GET', 'HTTP/1.1');
--
--utl_http.set_header(l_request, 'authorization', l_authorization); -- 02/07/2018
utl_http.set_header(l_request, 'authorization', xxavl_util_pkg.g_autenticacao_padrao); -- 02/07/2018
--
utl_http.set_header(l_request, 'User-agent', 'Apache-HttpClient/4.1.1');
utl_http.set_header(l_request, 'accept', 'application/json');
utl_http.set_header(l_request, 'Content-Type', 'application/json');
--
--
l_response := utl_http.get_response(l_request);
--
BEGIN
--
l_status_solicitacao := xxavl_util_pkg.trata_resposta(l_response, p_resp_json, l_clob_raw); --treats the http request and give me back it in a json variable p_resp_json
--
--l_resp_list := apps.json_list(p_resp_json.to_char).to_json_value;
--p_resp_json := apps.json(l_resp_list);
--dbms_output.put_line(p_resp_json.to_char);
--
dbms_output.put_line(apps.json_ext.get_string(p_resp_json, 'status.protocol') || '-----------------' );
Мне нужно получить «status.protocol», но так как мой json находится внутри «[]», я не могу это сделать, я пытался преобразуйте его в json_list, затем получите последний объект списка и поместите его в объект json, но я получил ошибки типа буфера из пространства.