SQLite JSON_EXTRACT 数组中 1 个对象的所有值

SQLite JSON_EXTRACT All values of 1 object in an array

我有一列包含 JSON 数组。数组是这样的(table 用户,列 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

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

您需要 table 值函数 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