使用 SQLite 和 json_tree 函数从 JSON 对象中提取值
extract value from JSON object using SQLite and the json_tree function
我有一个 table(命名为 patrons
),其中包含 JSON 数据的一列(命名为 json_patron_varfields
)——对象数组看起来像这样:
[
{
"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'
我有一个 table(命名为 patrons
),其中包含 JSON 数据的一列(命名为 json_patron_varfields
)——对象数组看起来像这样:
[
{
"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'