1

我有一个如下的 JSON 字符串,当我运行以下查询时,它不返回任何内容。JSON是有效的,所以我错过了什么吗?

SELECT JSON_VALUE(json_content, '$.section_1') FROM messages;


{"section_1":{"section_publish":true,"section_body":"<p><b>Overview<\/b><\/p><p>Launched on 19\/06\/1992, the NUVEEN NEW YORK SELECT TAX-FREE INCOME (NXN) is a passively managed exchange traded fund designed to provide a broad exposure to<\/p>"}}
4

2 回答 2

2

文档中:

该函数使用路径表达式计算 expr 并找到匹配或满足路径表达式的标量JSON 值。

我相信您的路径表达式将返回一个 JSON 对象,而不是一个标量。这是一个错误,默认行为是返回 null。您可以尝试添加一个ERROR ON ERROR子句并查看是否会引发错误。

于 2021-02-19T23:12:21.680 回答
0

正如 eaolson 所说,JSON_VALUE只会返回一个 SCALAR 值。如果要返回“section_1”中包含的 JSON 字符串,可以JSON_TABLE在使用关键字时使用FORMAT JSON

WITH
    messages
    AS
        (SELECT '{"section_1":{"section_publish":true,"section_body":"<p><b>Overview<\/b><\/p><p>Launched on 19\/06\/1992, the NUVEEN NEW YORK SELECT TAX-FREE INCOME (NXN) is a passively managed exchange traded fund designed to provide a broad exposure to<\/p>"}}'    AS json_content
           FROM DUAL)
SELECT j.*
  FROM messages
       CROSS JOIN
       JSON_TABLE (
           json_content,
           '$'
           COLUMNS section1 FORMAT JSON PATH '$.section_1',
           section1_publish PATH '$.section_1.section_publish',
           section1_body PATH '$.section_1.section_body') j;
于 2021-02-19T23:23:22.390 回答