1

我正在尝试使用 APEX_JSON 解析 PL/SQL 中的 JSON

我的 JSON 响应就像..

[
  {
    "NAME": "SAMPLE123",
    "SECOND_NAME": "MIDWEST MEDIA GROUP, INC",
    "ADDRESS": null,
    "PHONE_NUM": "050149603"
  },
  {
    "PHONE_NUM": "010609568",
    "ADDRESS": "BETTER VENDORS ASSOCIATION",
    "SECOND_NAME": "B V A CO OP INC",
    "NAME": "SAMPLE123"
  },
  {
    "PHONE_NUM": "111942970",
    "ADDRESS": null,
    "NAME": "SAMPLE123",
    "SECOND_NAME": "BALDWIN'S BUSINESS SYSTEMS, INC."
  },
  {
    "SECOND_NAME": "INNOVATIVE SALES TECHNOLO",
    "NAME": "SAMPLE123",
    "ADDRESS": null,
    "PHONE_NUM": "626904713"
  },
  {
    "ADDRESS": null,
    "PHONE_NUM": "050717132",
    "SECOND_NAME": "JEFFREY A. AVNY ATTORNEY AT LAW",
    "NAME": "SAMPLE123"
  },
  {
    "PHONE_NUM": "079203229",
    "ADDRESS": null,
    "SECOND_NAME": "3CLOUDS INC",
    "NAME": "SAMPLE123"
  },
  {
    "SECOND_NAME": "ARTHUR N SKLADMAN MD SC",
    "NAME": "SAMPLE123",
    "PHONE_NUM": "792034886",
    "ADDRESS": "SKLADMAN, ARTHUR"
  }]

我在 PL/SQL 中编写了以下代码

sJsonIndex         APEX_JSON.t_values;

APEX_JSON.parse(sJsonIndex, clob_buff);

DBMS_OUTPUT.PUT_LINE(clob_buff);

sCount := APEX_JSON.get_count(p_path => '.' , p_values => sJsonIndex);

DBMS_OUTPUT.PUT_LINE('sCount ' || sCount);

IF sCount > 0 THEN

    FOR i in 1 .. sCount LOOP

        A_id := APEX_JSON.get_varchar2(
                            p_values => sJsonIndex, 
                            p_path => 'NAME['|| i ||']');

        --A_id := APEX_JSON.get_varchar2('NAME['|| i ||']');

        DBMS_OUTPUT.PUT_LINE('sCount i ' || i);

        DBMS_OUTPUT.PUT_LINE('A_id i ' || A_id);                   


    END LOOP;

END IF;

我得到下面的输出:

sCount i 1
A_id i 
sCount i 2
A_id i 
sCount i 3
A_id i 
sCount i 4
A_id i 
sCount i 5
A_id i 
sCount i 6
A_id i 
sCount i 7
A_id i 
sCount i 8
A_id i 
sCount i 9
A_id i 
sCount i 10
A_id i 

任何人都可以帮忙吗?..我是 APEX_JSON 的新手

4

2 回答 2

3

你很接近 - 你的 json 包含一个记录数组,并且该数组未命名:

APEX_JSON.get_varchar2(p_path => '['|| i ||'].NAME', p_values => sJsonIndex);
APEX_JSON.get_varchar2(p_path => '['|| i ||'].SECOND_NAME', p_values => sJsonIndex);
APEX_JSON.get_varchar2(p_path => '['|| i ||'].ADDRESS', p_values => sJsonIndex);
APEX_JSON.get_varchar2(p_path => '['|| i ||'].PHONE_NUM', p_values => sJsonIndex);
于 2016-09-02T15:49:21.040 回答
1

对Jeffrey Kemp的回答稍作调整:

APEX_JSON.get_varchar2(p_path => '[%d].NAME', p0 => i, p_values => sJsonIndex);
APEX_JSON.get_varchar2(p_path => '[%d].SECOND_NAME', p0 => i, p_values => sJsonIndex);
APEX_JSON.get_varchar2(p_path => '[%d].ADDRESS', p0 => i, p_values => sJsonIndex);
APEX_JSON.get_varchar2(p_path => '[%d].PHONE_NUM', p0 => i, p_values => sJsonIndex);
于 2017-01-04T14:57:51.840 回答