create table t1(jdoc json);
insert into t1 values(’ {
“hey”: “guy”,
“anumber”: 243,
“anobject”: { “whoa”: “nuts”, “anarray”: [ 1, 2, “three” ], “more”:“stuff” },
“awesome”: true,
“bogus”: false,
“meaning”: null,
“japanese”: “明日がある。”,
“link”:“http://jsonview.com“, “notLink”: “http://jsonview.com is great”
}' );
mysql> select json_depth(jdoc) from t1;
返回json文本的深度
输出结果----4;
1 rows in set (0.02 sec)
mysql> select json_length(jdoc) from t1;
返回json文本的长度
输出结果----9
1 rows in set (0.01 sec)
mysql> select json_type(jdoc) from t1;
返回json值得类型
输出结果----OBJECT
1 rows in set (0.04 sec)
mysql> SELECT JSON_VALID(‘hello’) a, JSON_VALID(‘“hello”’) b;
判读是否是合法的json类型
返回结果:a:0 b:1
1 row in set (0.00 sec)
mysql> select json_keys(jdoc) as a from t1;
查看存储的json有哪些key
返回结果:array[
'a'=> [“hey”, “link”, “bogus”, “anumber”, “awesome”, “meaning”, “notLink”, “anobject”, “japanese”],
]
1 rows in set (0.05 sec)
mysql> select json_keys(jdoc,’anobject’) as a from t1;
查看anobject有哪些key
返回结果:array['a' =>[“more”,“whoa”,“anarray”]]
5rowsinset(0.00sec)
mysql>select jsonsearch(jdoc,′one′,′nuts′) as a from t1;
查看第一次出现的位置
返回结果:array['“.anobject.whoa”']
mysql> select json_search(jdoc,’all’,’%aaaaa%’) as a from t1;
查看所有包含aaaaa的位置
返回结果:aaaaa所在的key
json_search(jdoc,’all’,’%json%’)
1rows in set (0.00 sec)
mysql> select json_extract(jdoc,’link[0]’) as a from t1;
抽取值
返回结果:查找的key所对应的value 如:“http://jsonview.com
1 rows in set (0.00 sec)
mysql> select json_extract(jdoc,’anobject[0].more[0]’) from t1;
抽取值
返回结果同上
1 rows in set (0.00 sec)
或者使用下面的方式
mysql> select jdoc,jdoc->’key2’ from t1;
{“key1”: “value1”, “key2”: “value2”} | “value2” |
mysql> select JSON_ARRAY_APPEND(jdoc,’name’,’xxx’) from t1;
追加记录
在指定的json字段追加key-value 参数(字段名,key,value)
mysql> select JSON_REMOVE(jdoc,’name’) from t1;
mysql> select JSON_set(jdoc,’name’,’ooo’) from t1;
有就替换,没有就insert
mysql> SELECT JSON_UNQUOTE(JSON_EXTRACT(jdoc, ‘name’)) AS name from t1;
查询结果去掉双引号
返回字段jdoc中的key为name的集合,没有“”
因为 JSON 不同于字符串,所以如果用字符串和 JSON 字段比较,是不会相等的可以通过
where key->'$.value'的形式去查询 ->和->>结果等效