使用 pljson & plsql 获取 json

Get json with pljson & plsql

我正在尝试使用 pljson 从以下 json 中删除一些列表

my_json := json('{"Order": 
{"no": 1, "batch": 2,"id": 3,"quantity": 10,
"sm_pack": [
        {
            "no": 10,
            "id": 1010,
            "quantity": 2
        },
        {
            "no": 11,
            "id": 1040,
            "quantity": 8
        }
    ],
    "sm_size": [
        { ....etc etc

但是,我无法让它工作? 我可以使用以下语法打印数据:

  v_myjson.path('Order.sm_pack').print;
  v_myjson.path('Order.sm_pack[1].no').print;

但是我怎样才能将所有这些不同的列表分配给变量以进行进一步处理。我尝试了不同版本的 "v_list := json_list(my_json.get('Order.sm_pack')) .. my_json.get('sm_pack').. whatever I try its"NULL SELF",我似乎已经失明了。

此致

打印 json 列表和对象不同于将它们分配给某些变量以操纵它们。我将尝试通过您的示例回答您的问题,如下所示:

DECLARE
    obj json := json();
    obj_1 json := json();
    arr json_list := json_list();
    val NUMBER;
BEGIN
/*Create your object*/
    obj := json('{"Order":{"no":1,"batch":2,"id":3,"quantity":10,"sm_pack":[{"no":10,"id":1010,"quantity":2},{"no":11,"id":1040,"quantity":8}],"sm_size":[{"no":10,"id":1010,"quantity":2},{"no":11,"id":1040,"quantity":8}]}}');

/*Assign object*/
    obj_1 :=json(obj.get('Order'));

/*Assign list from within the object*/
    arr := json_list(obj_1.get('sm_pack'));
    arr.print;
    --or
    arr := json_list(json(obj.get('Order')).get('sm_pack'));
    arr.print;

/*Get object value from within list*/
    val := json_ext.get_number(json(arr.get(2)), 'id');
    DBMS_OUTPUT.PUT_LINE(VAL);

END;
/

请注意,我使用 get_number 函数作为没有单引号的值,否则,我会使用 get_string.

希望对您有所帮助!