使用regexp_substr在oracle查询中显示具有特殊字符的JSON字符串

时间:2017-03-06 14:05:47

标签: sql json oracle

我使用了以下查询来显示来自JSON字符串

的数据
SELECT regexp_replace(
                    regexp_substr('{"id": "1", "contactBy":"Rajesh Kumar"}', 
                    '"contactBy":\s*(".*?")', 1),
                    '"contactBy":\s*"(.*?)"', '\1', 
                    1, 1
                  ) text
  FROM dual;

如果我有任何特殊字符,如“(双引号)”,则文字将无法完全显示。

SELECT regexp_replace(
                    regexp_substr('{"id": "1", "contactBy":"Raje"sh Kumar"}', 
                    '"contactBy":\s*(".*?")', 1),
                    '"contactBy":\s*"(.*?)"', '\1', 
                    1, 1
                  ) text
  FROM dual;

ex:Raje“sh Kumar然后输出显示为Raje

但我需要输出Raje“sh Kumar。

如何更改查询以显示特殊字符?

1 个答案:

答案 0 :(得分:0)

如果你在JSON字符串中有一个引号,那么它将使用反斜杠进行转义:

 {"id": "1", "contactBy":"Raje\"sh Kumar"}

使用正则表达式(([^"\]|\\.)*)匹配引号内的值:

SELECT REGEXP_SUBSTR(
         '{"id":"1","contactBy":"Quoted \"String\"\\"}',
         '"contactBy":"(([^"\]|\\.)*)"',
         1,
         1,
         NULL,
         1
       ) AS contactBy
FROM   DUAL;

<强>输出

CONTACTBY
-------------------
Quoted \"String\"\\