【问题标题】:SQLite JSON_EXTRACT All values of 1 object in an arraySQLite JSON_EXTRACT 数组中 1 个对象的所有值
【发布时间】:2021-09-21 23:28:00
【问题描述】:

我有一列包含 JSON 数组。数组是这样的(表用户,列user_info):

[
 {"email":"xyz@hotmail.com","user_key":"987654","name":"John Paul"},
 {"email":"abc@hotmail.com","user_key":"123456","name":"Tom Sawyer"},
 {"email":"1234@msn.com","user_key":"887645","name":"Bart Simpson"}
]

有些在每个数组中有 3 个对象,有些有 20 个,有些介于两者之间。我想从数组中提取每个“名称”值。因此,对于上面的示例,我希望我的查询结果显示:

John Paul
Tom Sawyer
Bart Simpson

我可以这样做:

SELECT json_extract(users.user_info, '$[0]."name"', $[1]."name"', $[2]."name"')
FROM users

但是,如果我想选择所有这些,无论该列的每一行的长度如何,我将如何处理这样我就不必列出数组的每个对象编号?

【问题讨论】:

    标签: arrays json sqlite json-extract


    【解决方案1】:

    你需要表值函数 json_each():

    SELECT json_extract(json_each.value, '$.name') name
    FROM users u, json_each(user_info)
    

    如果您想要逗号分隔列表中每行的所有名称,您可以使用GROUP_CONCAT():

    SELECT GROUP_CONCAT(json_extract(json_each.value, '$.name')) name
    FROM users u, json_each(user_info)
    GROUP BY u.thread_id
    

    请参阅demo

    【讨论】:

    • 有没有办法让所有 3 个名字都出现在一行中?而不是:1. 约翰·保罗 2. 汤姆·索亚 3. 巴特·辛普森 我可以把它变成:1. 约翰·保罗·汤姆·索亚巴特·辛普森
    • @SnakeDoc65 表中有没有像主键id 这样的另一列?
    • @SnakeDoc65 查看我的第二个查询。
    猜你喜欢
    • 2019-02-06
    • 2021-11-26
    • 2021-03-31
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2021-06-09
    相关资源
    最近更新 更多