首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pljson读取内部数组中的数据

用pljson读取内部数组中的数据
EN

Stack Overflow用户
提问于 2017-04-26 17:17:54
回答 1查看 1.3K关注 0票数 0

示例JSON:

代码语言:javascript
复制
{"TestResults": [{
    "Messages": ["PASS: Status date 7/1/2002, ID"],
    "Status": "Pass",
    "Name": "IFTA License"
},
{
    "Messages": ["Carrier compliant"],
    "Status": "Pass",
    "Name": "MCOLS carrier compliance check"
},
{
    "Messages": ["No"],
    "Status": "Pass",
    "Name": "IFTA Revoked"
},
{
    "Messages": ["PASS=> Not under Federal Out Of Service order"],
    "Status": "Pass",
    "Name": "Federal Out of Service Status"
},
{
    "Messages": ["PASS => Carrier status code 100: Active ID"],
    "Status": "Pass",
    "Name": "IRP Status"
},
{
    "Messages": ["PASS => Status Code 1: Active"],
    "Status": "Pass",
    "Name": "IFTA Status"
},
{
    "Messages": ["PASS => UCR fee paid for 2017",
    "PASS => UCR fee paid for 2016"],
    "Status": "Pass",
    "Name": "UCR Fee Status"
},
{
    "Messages": ["PASS => MCMIS Status = A: Active"],
    "Status": "Pass",
    "Name": "USDOT Status"
},
{
    "Messages": ["PASS=> Not under Federal Out Of Service order"],
    "Status": "Pass",
    "Name": "PRISM Target Status"
},
{
    "Messages": ["PASS => ISS Score: 42 No Inspection Warranted"],
    "Status": "Pass",
    "Name": "ISS2 Score"
},
{
    "Messages": ["PASS => MCS-150 Up to Date: Last Update 4/28/2016"],
    "Status": "Pass",
    "Name": "MCS-150 Status"
},
{
    "Messages": ["PASS => Carrier is authorized"],
    "Status": "Pass",
    "Name": "Operating Authority Status"
}]

}

使用pljson的代码:

代码语言:javascript
复制
DECLARE

     l_http_req UTL_HTTP.REQ;
     l_http_resp UTL_HTTP.RESP;
     l_response CLOB;
     l_buffer VARCHAR2(4000);
     l_response_json common.json;
     l_testresults_list common.json_list;
     l_messages_list common.json_list;

BEGIN

    utl_http.set_wallet('file:/home/oracle/wallet/blah',NULL);
    l_http_req := utl_http.begin_request('https://some_url', 'GET');
    utl_http.set_header(l_http_req, 'Content-Type', 'application/json');
    utl_http.set_authentication(l_http_req, 'user', 'password'); 

BEGIN
dbms_lob.createtemporary(l_response, TRUE);
dbms_lob.open(l_response, dbms_lob.lob_readwrite);
l_http_resp := utl_http.get_response(l_http_req);
LOOP
    utl_http.read_text(l_http_resp, l_buffer, 2000);
    dbms_lob.writeappend(l_response, LENGTH(l_buffer), l_buffer);
END LOOP;
EXCEPTION
    WHEN utl_http.end_of_body THEN
        NULL;
    WHEN OTHERS THEN
        RAISE;
    END;
    dbms_lob.close(l_response);
    utl_http.end_response(l_http_resp);

-- Convert CLOB content to JSON object.
BEGIN
    l_response_json := common.json(l_response);
    EXCEPTION
        WHEN OTHERS THEN
        RAISE;
    END;

    BEGIN
        l_testresults_list := json_ext.get_json_list(l_response_json, 'TestResults');
        FOR i IN 1..l_testresults_list.COUNT LOOP
            dbms_output.put_line('name: '||common.json_ext.get_string(common.json(l_testresults_list.GET(i)), 'Name'));
            dbms_output.put_line('status: '||common.json_ext.get_string(common.json(l_testresults_list.GET(i)), 'Status'));
            l_messages_list := json_ext.get_json_list(common.json(l_testresults_list.GET(i)), 'Messages');
            FOR j IN 1..l_messages_list.COUNT LOOP
                dbms_output.put_line('messages: '||common.json_ext.get_string(common.json(l_messages_list.GET(j)), 'Messages'));
                dbms_output.put_line('count : '||j);
            END LOOP;
        END LOOP;
    END;

    EXCEPTION
        WHEN OTHERS THEN
            utl_http.end_response(l_http_resp);
        RAISE;      
END;

我可以从这个JSON提取名称和状态值,但是当执行这一行代码来提取消息时:

代码语言:javascript
复制
dbms_output.put_line('messages: '||common.json_ext.get_string(common.json(l_messages_list.GET(j)), 'Messages'));

我收到一个ORA-30625:不允许在空自参数上进行方法分派。

是否有人能够使用pljson成功地从内部数组读取值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-27 13:32:44

由于您使用的是数组,所以您应该能够简单地:

代码语言:javascript
复制
dbms_output.put_line( l_messages_list.get(j).to_char() );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43640691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档