PLJSON开源库介绍(二)

本文来自李明子csdn博客(http://blog.csdn.net/free1985),商业转载请联系博主获得授权,非商业转载请注明出处!
5.3 对象构造
JSON和JSON_LIST对象都可以通过相应的“构造函数”构建。这些“构造函数”既接受字符串类型参数,也接受JSON_VALUE类型参数。当然,我们也可以调用无参构造函数构造“空”对象。
以下代码演示了JSON和JSON_LIST对象的构造方法。

--对象构造示例
procedure EG_Create is
    --json对象
    aJsonObj json;
    --另一个json对象
    anotherJsonObj json;
    --json数组
    aJsonArray json_list;
    --另一个json数组
    anotherJsonArray json_list;
    --json值
    aJsonValue json_value;

  begin
    --json对象反串行化
    aJsonObj := json('{"key1":["1","2","3"],"key2":{"key2A":"a","key2B":"b"}}');
    --json空对象
    anotherJsonObj := json();
    --json数组反串行化
    aJsonArray := json_list('[5,6,7]');
    --json数组空对象
    anotherJsonArray := json_list();

    aJsonValue := aJsonObj.get('key2');

    --通过json_value构造json对象
    anotherJsonObj := json(aJsonValue);

    aJsonValue := aJsonObj.get('key1');

    --通过json_value构造json数组对象
    anotherJsonArray := json_list(aJsonValue);
    dbms_output.put_line(aJsonObj.to_char);
    dbms_output.put_line(anotherJsonObj.to_char);
    dbms_output.put_line(aJsonArray.to_char);
    dbms_output.put_line(anotherJsonArray.to_char);
  end;

5.4 JSON对象基本操作
对JSON对象可以使用get、put、remove等方法分别实现名值对的获取、插入和删除。示例代码如下:

--JSON对象基本操作示例
  procedure EG_BaseOperationForObj is
    --json对象
    aJsonObj json;
    --json值
    aJsonValue json_value;
  begin
    aJsonObj := json('{"key1":"1","key2":{"key2A":"a","key2B":"b"}}');
    --可以通过get方法获取指定key的value,返回类型为json_value
    aJsonValue := aJsonObj.get('key1');
    --可以通过get_string、get_number、get_bool等方法获取具体类型的值,
    --也可以使用to_char和to_clob方法
    dbms_output.put_line(aJsonValue.get_string);
    --可以通过put方法为json对象加入名值对
    aJsonObj.put('key3', 999);
    --可以通过print方法打印输出json对象,
    --{"key1":"1","key2":{"key2A":"a","key2B":"b"},"key3":999}
    aJsonObj.print;
    --可以通过remove方法从json对象删除名值对
    aJsonObj.remove('key2');
    --输出{"key1":"1","key3":999}
    aJsonObj.print;
  end;

JSON对象也包含用于判断key值是否存在(exist方法)等功能的方法。

5.5 遍历JSON对象的名值对
遍历JSON对象的名值对的方法是:

  1. 通过get_keys方法获取键值key的集合,返回类型为json_list ;
  2. 遍历key集合,获取每个key对应的值;

注意,集合下标从1开始。示例代码如下:

--JSON对象key的遍历
  procedure EG_TraversalForObj is
    --json对象
    aJsonObj json;
    --key数组
    keys json_list;
  begin
    aJsonObj := json('{"key1":"1",
    "key2":{"key2A":"a","key2B":"b"}}');
    --通过get_keys方法获取关键字集合,类型为json_list
    keys := aJsonObj.get_keys;
    --遍历关键字集合
    for i in 1 .. keys.count loop
      dbms_output.put_line(aJsonObj.get(keys.get(i).get_string).to_char);
    end loop;
  end;

5.6 JSON数组对象基本操作
对JSON数组对象(JSON_LIST)可以使用get、append、remove、replace等方法分别实现元素的获取、添加、删除和替换,示例代码如下:

--JSON数组基本操作示例
  procedure EG_BaseOperationForArray is
    --json数组
    aJsonArray json_list;
    --json值
    aJsonValue json_value;
  begin
    aJsonArray := json_list('[{"key1":"1","key2":"2"},{"key1":"a","key2":"b"}]');
    --可以通过get方法获取指定索引位置的元素,返回值类型为json_value
    aJsonValue := aJsonArray.get(1);
    --输出为{"key1":"1","key2":"2"}
    aJsonValue.print;
    --可以通过append方法向json数组添加新元素
    aJsonArray.append(json('{"key1":"A","key2":"B"}').to_json_value);
    --输出为[{"key1":"1","key2":"2"},{"key1":"a","key2":"b"},
    --{"key1":"A","key2":"B"}]
    aJsonArray.print;
    --可以通过remove方法从json数组移除元素
    aJsonArray.remove(2);
    --输出为[{"key1":"1","key2":"2"},{"key1":"A","key2":"B"}]
    aJsonArray.print;
    --可以通过replace方法替换json数组中指定位置的元素,参数类型为json_value
    aJsonArray.replace(1, json('{"key1":"m","key2":"n"}').to_json_value);
    --输出为[{"key1":"m","key2":"n"},{"key1":"A","key2":"B"}]
    aJsonArray.print;
  end;

5.7 JSON数组的遍历
通过JSON_LIST的count方法可以获取JSON数组中的元素总数。之后便可以通过get方法传递索引遍历JSON数组。示例代码如下:

  --JSON数组的遍历示例
  procedure EG_TraversalForArray is
    --json数组
    aJsonArray json_list;
  begin
    aJsonArray := json_list('[{"key1":"1","key2":"2"},
    {"key1":"a","key2":"b"}]');
    --遍历数组中各元素
    for i in 1 .. aJsonArray.count loop
      aJsonArray.get(i).print;
    end loop;
  end;

另外,JSON_LIST还提供了head、last、tail等方法分别用于返回首元素、尾元素和非首元素;同时还提供了remove_first和remove_last方法分别用于去头和去尾。
(未完待续)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值