我需要在Oracle查询中将JSON字符串转换为JSON。
示例字符串:
{"1":{"qid":1,"aid":1,"a":"Yes","isdyn":0},"2":{"qid":2,"aid":7,"a":"sdfbsjkb","isdyn":1},"3":{"qid":2,"aid":7,"a":"sdfbsjkb","isdyn":1}}
然后将其存储在具有有效JSON约束的Oracle列表中。
如何在Oracle中做同样的事情,最好的方法是什么?
你读过这个吗
现在浏览此页面,谢谢分享。
Oracle本身没有任何意义。 甚至Oracle 12c也没有任何意义。 您的完整版本号是多少? 答案可能取决于此。
Oracle Database 12c企业版12.1.0.2.0版-64位
使用REPLACE删除引号前的那些反斜杠。 然后,您可以将它们插入表中并将其存储为普通JSON。
CREATE TABLE t_json (
id INTEGER
GENERATED ALWAYS AS IDENTITY,
json_col CLOB
CONSTRAINT ensure_json CHECK ( json_col IS JSON ) --Is a valid json
);
INSERT INTO t_json ( json_col )
SELECT replace('{"1":{"qid":1,"aid":1,"a":"Yes","isdyn":0},"2":{"qid":2,"aid":7,"a":"sdfbsjkb","isdyn":1},"3":{"qid":2,"aid":7,"a":"sdfbsjkb","isdyn":1}}'
,'"','"')
FROM dual;
1 row inserted.
访问元素
select t.json_col."1".a from t_json t;
A
----
Yes
但是,使用相同的方法,如果实际JSON中有特殊字符,如"a":"Yes\#",那么\#也需要替换为#。 我认为,当JSON对象转换为JSON字符串时,会附加每个特殊字符。 因此,逻辑将类似于replace(\ any special character,any special character)。 请提出建议。
@Tajinder:您的问题更多是关于如何转换字符串而不是转换为JSON。 这个问题回答了您原来的问题。 您可以尝试REGEXP_REPLACE( "a":"Yes\#" ,\\(["#]),\1)用字符本身替换任何后跟反冲的内容。 如果您还有更多要更换/修改的东西,请尝试提出一个单独的问题,并提供适当的详细信息。如果认为有帮助,可以接受此答案。
如果问题不清楚,我们很抱歉。 问题中给出的字符串只是一个例子。 希望现在很清楚。 我也编辑了问题。 您可以检查并提出建议。
with input as ( select
'{"1":{"qid":1,"aid":1,"a":"Yes","isdyn":0},"2":{"qid":2,"aid":7,"a":"sdfbsjkb","isdyn":1},"3":{"qid":2,"aid":7,"a":"sdfbsjkb","isdyn":1}}'
txt
from dual
)
select json_value(
'["' || txt || '"]',
'$[0]'
error on error
) json_txt
from input;
{"1":{"QID":1,"助剂":1,"A":"是","isdyn":0},"2":{"QID":2"援助":7,"一个":"sdfbsjkb","isdyn":1},"3":{"QID":2"援助":7,"一个":"sdfbsjkb","isdyn":1}}
JSON_VALUE只是为您释放了所有内容。
最好的祝福,
炖阿什顿