我有一列配置文件,其中是json。如何搜索所有字段以搜索特定的尼克。nick可能在utf-8中,因此正则表达式不适用于解决方案。
{
"nick1": {
"color": [
1,
1,
1
],
"highlight": [
1,
1,
1
],
"global": false,
},
"nick2": {
"color": [
1,
0.15,
0.15
],
"highlight": [
0.2,
1,
0.2
],
"global": true,
},
"other_nick": {
"color": [
1,
1,
1
],
"highlight": [
1,
1,
1
],
"global": false,
}
1条答案
按热度按时间kq0g1dla1#
首先,你的json格式不正确。不能在对象的最后一个元素后面加逗号。
应该是
最后一行附近缺少一个右括号:
应该是
所以我想您没有使用mysql 5.7
JSON
数据类型。如果是,它将不允许您保存格式错误的json。它会产生以下错误:错误3140(22032):无效的json文本:“缺少对象成员的名称。”在列“…”的值的位置138处。
一旦我更正了格式,我就可以测试你的json了。
然后我可以提取一个给定尼克的条目:
如果尝试提取不存在的密钥的路径,则会得到null:
这个
->
MySQL5.7及更高版本支持运算符。它也可以作为函数访问JSON_EXTRACT()
. 看到了吗https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html你可能会说,“我使用的是MySQL5.6,我怎么能做同样的事情呢?”
如果您想在mysql中使用json,应该升级到5.7或更高版本。MySQL5.6或更早版本中不支持json。如果您想了解在MySQL5.6中解析json所需的工作量,请看下面的答案:how to get Value from mysql(5.6)column if that contains json document as string and notice it take some people's answers to get a function that finally work.如果MySQL5.6中包含json文档作为字符串,请注意,需要几个人的回答才能得到最终工作的。
我建议升级到MySQL5.7要比使用MySQL5.6解析json这种神秘的存储函数轻松得多。