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。
我有一列包含 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。