本文来自李明子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对象的名值对的方法是:
- 通过get_keys方法获取键值key的集合,返回类型为json_list ;
- 遍历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方法分别用于去头和去尾。
(未完待续)