从Oracle中的JSON字符串字段提取标记值

vs91vp4v  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(210)

我有一个存储JSON字符串的Oracle列。

{
    "data": {
        "employer": {
            "status": "active",
            "name1": {
                "content": "My favorite company"
            }
        }
    }
}

字符串
我感兴趣的是获取第一次出现的name1标签中包含的content标签的值。因此,在本例中,我想要的是获取“My favorite company”(不带引号)
如何在Oracle SQL查询中执行此操作?

ijnw1ujt

ijnw1ujt1#

如果您使用的是Oracle 12.2或更高版本,则可以使用the SQL/JSON function JSON_VALUE,如以下查询所示-

SELECT JSON_VALUE(YOUR_COLUMN, '$.content')
FROM YOUR_TABLE;

字符串

a9wyjsp7

a9wyjsp72#

这里有一个选项;如果JSON数据是 * 简单 * 的,应该是可以的,但是-这就是你的例子所建议的:

SQL> select * from test;

JSON
--------------------------------------------------------------------------------
{
    "data": {
        "employer": {
            "status": "active",
            "name1": {
                "content": "My favorite company"
            }
        }
    }
}

字符串
查询:

  • temp CTE查找"content"字符串并返回其后的所有内容
  • 最后一个查询提取第三和第四个双引号之间的字符
SQL> with temp as
  2    (select substr(json,
  3                   instr(json, '"content"')
  4                  ) content
  5     from test
  6    )
  7  select substr(content,
  8                instr(content, '"', 1, 3) + 1,
  9                instr(content, '"', 1, 4) - instr(content, '"', 1, 3) - 1
 10               ) result
 11  from temp;

RESULT
--------------------------------------------------------------------------------
My favorite company

SQL>

相关问题