繁体   English   中英

在 Sqlite 查询中使用 JSON 谓词来获取数组项

[英]Use a JSON predicate in Sqlite query to get an array item

我正在尝试使用谓词从 Sqlite 中的 JSON 数组中检索单个项目。

这是我的样本数据集:

{
    "book": [
        {
            "author": "Nigel Rees",
            "category": "reference",
            "price": 8.95,
            "title": "Sayings of the Century"
        },
        {
            "author": "Herman Melville",
            "category": "fiction",
            "isbn": "0-553-21311-3",
            "price": 8.99,
            "title": "Moby Dick"
        },
        {
            "author": "J.R.R. Tolkien",
            "category": "fiction",
            "isbn": "0-395-19395-8",
            "price": 22.99,
            "title": "The Lord of the Rings"
        }
    ]
}

我只想检索价格为 22.99 的商品。

在 XPath 我会做这样的事情: //book[@price='22.99']

我在线尝试了一些 JSON 路径评估器( https://jsonpath.com/ ),这应该可以工作: $.book[?(@.price == 22.99)]

但是,当我尝试在 Sqlite 的SELECT查询中使用相同的路径时,它会引发以下异常:

Result: JSON path error near '[?(@.price == 22.99)]'

我错过了什么吗? 当我尝试没有谓词的路径(如$.book[2].title )时,它可以工作。

我的完整 SQL 查询是(JSON 在content字段中):

SELECT Json_extract(content, '$.book[?(@.price == 22.99)]')
FROM json_test
WHERE id = 1

PS:我知道我可以使用WHERE语句进行查询,但我更希望仅使用 JSON 路径让它工作。

类似于以下内容:

SELECT j.value
FROM json_test AS jt
JOIN json_each(jt.content, '$.book') AS j
WHERE jt.id = 1 AND json_extract(j.value, '$.price') = 22.99

如果要过滤 json object 中的值,则无法避免使用WHERE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM