H2 没有像
JSON_VALUE(my_json, '$.myFieldName')
这样的 JSON 提取功能(例如 MySQL)。然而,“字段参考”的 H2 语法参考 指出:
( expression ) . fieldName
从行值或 JSON 值返回字段值。如果值为 null 或在 JSON 中找不到具有指定名称的字段,则返回 NULL。如果左侧的表达式是标识符(列名),则必须将其括在括号中,否则不需要。
(我的重点)
create table my_table (
id int generated by default as identity,
my_json JSON null default null,
);
insert into my_table (my_json) values ('{ "myFieldName": "foo bar" }');
select id, my_json, (my_json).myFieldName as baz from my_table;
NULL
别名返回的
baz
值 - 所有其他值均符合预期。我确实没有使用此语法遇到任何错误。但是,我也没有得到想要的结果foo bar。
这可以按照我的意图使用(从 JSON 对象中提取字段)吗?我是否正确使用了它?如果没有的话我该如何使用?
相关H2数据库中的JSON_VALUE用法解决了同样的问题;回答者提出了建议
我已经能够将正则表达式方法的一些改编与
REGEXP_SUBSTR()
一起使用,但这留下了笨拙的代码(毕竟涉及正则表达式),我想知道更简单的替代方案。在我看来,H2 提供了创建 JSON 对象和数组的函数,但也不使用它们(除了上述内容,据我所知),这确实很可疑。
insert into my_table (my_json) values (JSON '{ "myFieldName": "foo bar" }');
尝试将字符串文字插入到 H2 中的 JSON 列中会创建一个 JSON 字符串值。
select id, my_json, (my_json)."myFieldName" as baz from my_table;
未加引号的标识符默认转换为大写。