我有一个像这样的对象的json列表
[{
"something": "bla",
"id": 2
}, {
"something": "yes",
"id": 1
}]
Run Code Online (Sandbox Code Playgroud)
我的id字段始终是一个数值。但是当我尝试查找时id = 2,MySQL返回NULL
select
json_search(
json_extract(
'[{"something": "bla" ,"id": 2}, {"something": "yes","id": 1}]',
"$[*].id"
),
'one',
2
) as json_search;
json_search |
------------|
|
Run Code Online (Sandbox Code Playgroud)
当我在我的json id对象中使用字符串作为值而不是数字值时,得到的结果为索引0。
select
json_search(
json_extract(
'[{"something": "bla" ,"id": "2"}, {"something": "yes","id": 1}]',
"$[*].id"
),
'one',
"2"
) as json_search;
json_search |
------------|
"$[0]" |
Run Code Online (Sandbox Code Playgroud)
我正在使用MySQL 5.7.17
@@version |
-----------|
5.7.17-log |
Run Code Online (Sandbox Code Playgroud)
MySQL不提供json数组中的数字搜索吗?
小智 0
尽管该JSON_EXTRACT函数正在返回[2, 1]并且它是有效的 JSON,但如果您搜索文档,该JSON_SEARCH函数是:
JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, 路径] ...])
因此,据我了解,您只能使用STRING值,而不能使用数值。但解决问题的一种方法是使用该JSON_CONTAINS函数,因为无论数值存在与否,它都会返回 1 或 0。
select
json_contains(
json_extract(
'[{"something": "bla" ,"id": 2}, {"something": "yes","id": 1}]',
"$[*].id"
),
"2"
) as json_contains;
Run Code Online (Sandbox Code Playgroud)
唯一的问题是您无法获取 JSON 文档中给定值的路径。希望有帮助。