sqlite - 使用 SQLite 和 json_tree 函数从 JSON 对象中提取值

标签 sqlite sqlite-json1

我有一个表(名为 patrons),其中包含一列(名为 json_patron_varfields)的 JSON 数据 - 一个对象数组,如下所示:

[
    {
    "display_order": 1,
    "field_content": "example 1",
    "name": "Note",
    "occ_num": 0,
    "varfield_type_code": "x"
    },
    {
    "display_order": 2,
    "field_content": "example 2",
    "name": "Note",
    "occ_num": 1,
    "varfield_type_code": "x"
    },
    {
    "display_order": 3,
    "field_content": "some field we do not want",
    "occ_num": 0,
    "varfield_type_code": "z"
    }
]

我想要做的是定位包含名为 varfield_type_code 的键和 x 值的对象,我已经能够使用以下查询:

SELECT
patrons.patron_record_id,
json_extract(patrons.json_patron_varfields, json_tree.path)
FROM
patrons,
json_tree(patrons.json_patron_varfields)
WHERE
json_tree.key = 'varfield_type_code'
AND json_tree.value = 'x'

我的问题是...如何从我要提取的对象中提取(甚至可能过滤)field_content 键的值?

我正在努力解决如何做到这一点的语法...我认为它可以像使用 json_extract(patrons.json_patron_varfields, json_tree.path."field_content") 一样简单,但是这似乎不正确..

最佳答案

您可以连接来构建字符串

json_tree.path || '.field_content'

根据您给出的结构 - 您还可以使用 json_each() 而不是 json_tree() 这可能会简化事情。

摘录:

SELECT
patrons.patron_record_id,
json_extract(value, '$.field_content')
FROM
patrons, 
json_each(patrons.json_patron_varfields)
WHERE json_extract(value, '$.varfield_type_code') = 'x'

过滤器:

SELECT
patrons.patron_record_id,
value
FROM
patrons, 
json_each(patrons.json_patron_varfields)
WHERE json_extract(value, '$.varfield_type_code') = 'x'
AND   json_extract(value, '$.field_content') = 'example 2'

关于sqlite - 使用 SQLite 和 json_tree 函数从 JSON 对象中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70749429/

相关文章:

带有 JSON1 的 Ubuntu 16.04 上的 SQLite

json - Sqlite:将新元素附加到现有数组

json - JSON extract\set 的 SQLite JSON1 示例

python - python 可以访问谷歌浏览器 webSQL 数据库

c - SQLite - 找到某个值并找到该行输入值出现的另一列上的最高值,然后选择该行上的所有元素

java - sql 在 BLOB(数字列表)中搜索数字

sql - 使用 JSON1 跨多个表聚合 SQLite 查询

android - 找不到 DatabaseObjectNotClosedException 错误的来源

javascript - 如何处理 JavaScript 中的异步函数结果