在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素
Posted
技术标签:
【中文标题】在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素【英文标题】:In Oracle PL/SQL, How do I check if a JSON object contains an element of a specific key在 Oracle PL/SQL 中,如何检查 JSON 对象是否包含特定键的元素 【发布时间】:2021-12-30 20:05:01 【问题描述】:我有一个如下所示的程序。它接受 JSON 对象作为输入。此对象类型中的元素之一是带有键 samplekey
的数组。在某些情况下,JSON 对象 p_object
不包含 samplekey
数组。在这些情况下,该过程会遇到运行时异常。在 PL/SQL 中处理这种情况的最佳方法是什么?我是否必须首先检查对象p_object
中是否存在带有键samplekey
的元素?如果是,我该怎么做?有没有更好的方法来处理这种情况?
procedure(p_object in json_object_t)
as
lja json_array_t;
begin
lja := p_object.get_array('samplekey');
end;
【问题讨论】:
视情况而定。当发现该错误时,您希望该过程执行什么操作?如果您希望它被忽略(并且做一些完全不同的事情,不使用该数组),那么您可以在if
语句中检查是否存在。否则,只需在代码的错误处理部分处理错误即可。
【参考方案1】:
您可以使用JSON_OBJECT_T
的HAS
功能。如果 JSON 具有您搜索的密钥,这将返回 TRUE
或 FALSE
。下面是一个如何使用它的示例。
DECLARE
PROCEDURE test_json (p_object IN json_object_t)
IS
BEGIN
IF p_object.has ('samplekey')
THEN
DBMS_OUTPUT.put_line ('JSON has the key "samplekey"');
ELSE
DBMS_OUTPUT.put_line ('JSON does NOT have the key "samplekey"');
END IF;
END;
BEGIN
test_json (json_object_t (''));
test_json (json_object_t ('"samplekey":123'));
test_json (json_object_t ('"otherkey":"test"'));
END;
/
--Output
JSON does NOT have the key "samplekey"
JSON has the key "samplekey"
JSON does NOT have the key "samplekey"
【讨论】:
以上是关于在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素的主要内容,如果未能解决你的问题,请参考以下文章