2015-07-13 35 views
0

我试图用pljson砍掉从以下JSON一些列表获取JSON与pljson&PLSQL

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; 

但我怎么能assing所有这些不同的列表,以作进一步处理的变量。我尝试了不同版本的“v_list:= json_list(my_json.get('Order.sm_pack')).. my_json.get('sm_pack')..无论我尝试它的”NULL SELF“,我似乎已经变成了盲人。

问候

回答

1

印刷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

希望有所帮助!

+1

谢谢,你让我的一天! – elwis

+0

正如一个侧面说明,也有https://github.com/doberkofler/PLSQL-JSON – doberkofler