我try 在SQLite中创建一个触发器(在INSERT之前或之后),它接受以下新行:

** events table **
id   timeslots
1    [{start: 2023, end: 2024 }, { start: 2025, end: 2025 }, ...]

并将其保存到另一个表中:

** timeslots table **
id   end   start
1    2023  2024
1    2024  2025
1    ...   ...

此时,我不起作用的触发器是:

CREATE TRIGGER IF NOT EXISTS insert_timeslots
  AFTER INSERT ON events
  BEGIN
    INSERT INTO timeslots (id, start, end)
    SELECT 
      json_extract(t.value, '$.id'),
      json_extract(t.value, '$.start'),
      json_extract(t.value, '$.end'),
    FROM json_each(NEW.timeslots) AS t;
END;`

I've start a DBFiddle to help debugging.
Any clue? Thanks

推荐答案

id不是json数组的一部分:

CREATE TRIGGER IF NOT EXISTS insert_timeslots AFTER INSERT ON events
BEGIN
  INSERT INTO timeslots (id, start, end)
  SELECT NEW.id,
         json_extract(t.value, '$.start'),
         json_extract(t.value, '$.end')
  FROM json_each(NEW.timeslots) AS t;
END;

See the demo.

Json相关问答推荐

Allof Indide的JSON模式之一

如何在Haskell中解析JSON,其中字段的名称可以是多个值之一,但应该转换为单个Haskell类型?

解析Ansible AWS ec2_security_group中的json以提取安全组ID

如何使用Powershell查找所有包含特定键值对的JSON对象并迭代所有对象?

Jolt 转换数组对象并将某些字段移动到嵌套数组

如何按键过滤

如何将该 JSON 解析为 Kotlin 类?

如何使用 Google 表格应用程序脚本将 JSON 中的多个字段提取到 Google 表格中

jq:来自嵌套 JSON 的映射

根据数据框中的其他列值将列表 json 对象插入行

如果 JSON 对象包含列表中的子字符串,则丢弃它们

使用 jq Select 键:值并输出为数组

在PowerShell中按时间戳过滤JSON

Golang / Go - 如果 struct 没有字段,如何将其编组为空?

从ruby中的json获取特定的键值

十六进制格式可以与 JSON 文件一起使用吗?如果是这样,怎么做?

JSON 语法错误:'unexpected number' 或 'JSON.parse: expected ',' or '}' after property value in object'

JSON日期到Java日期?

按键值过滤 JSON

无法解析 JSON 文件中的 TAB