2[1, "apple ", "red ", {"age": 18, "name": "tom"}]mysql5.7 버전에서 JSON 유형 필드 지원 시작
json_extract는 ->
json_unquote(json_extract())로 완전히 축약될 수 있습니다. ->> ;… 이름": "tom", "score": [100, 90, 87], "address": {"city": "Changsha", "province": "Hunan"}}
3. 기본 구문 | - JSON 객체의 키에 해당하는 값을 가져옵니다 |
---|---|
에서 키 이름으로 값을 가져오는 것을 나타냅니다. json_extract | |
대신 -> 표현식을 사용하세요. 획득한 값 자체가 문자열인 경우 획득한 값은 "tom"과 같이 따옴표로 묶입니다. "tom" 으로 이스케이프될 수 있습니다. 이 문제를 해결하려면 json_unquote 함수의 다른 레이어를 외부에 래핑하거나 -> |
CREATE TABLE `test_json` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` json DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
json_extract 함수에서 첫 번째 매개변수 내용은 json 데이터를 나타내고 두 번째 매개변수는 json 경로입니다. 여기서 $는 json 데이터 자체를 나타내고 $[i]는 json 배열의 인덱스 i가 있는 요소 가져오기를 나타냅니다( 인덱스는 0부터 시작)
앞서 소개한 두 가지 획득 방법과 결합하면 json data# 插入两条测试用的记录 INSERT INTO `test_json` (`content`) VALUES ('{\"name\":\"tom\",\"age\":18,\"score\":[100,90,87],\"address\":{\"province\":\"湖南\",\"city\":\"长沙\"}}'); INSERT INTO `test_json` (`content`) VALUES ('[1, "apple", "red", {"age": 18, "name": "tom"}]');
- JSON 데이터에 중첩 가져오기
content: id=2
[1, “ apple", "red", {"age": 18, "name": "tom"}]# 得到"tom" select json_extract(content,'$.name') from test_json where id = 1; # 简写方式:字段名->表达式等价于json_extract(字段名,表达式) select content->'$.name' from test_json where id = 1; # 结果: +--------------------------------+ | json_extract(content,'$.name') | +--------------------------------+ | "tom" | +--------------------------------+ +-------------------+ | content->'$.name' | +-------------------+ | "tom" | +-------------------+ # 解除双引号,得到tom select json_unquote(json_extract(content,'$.name')) from test_json where id = 1; # 简写方式:字段名->>表达式等价于json_unquote(json_extract(字段名,表达式)) select content->>'$.name' from test_json where id = 1; # 结果: +----------------------------------------------+ | json_unquote(json_extract(content,'$.name')) | +----------------------------------------------+ | tom | +----------------------------------------------+ +--------------------+ | content->>'$.name' | +--------------------+ | tom | +--------------------+
4. 점점 나아짐
는 여러 경로의 데이터를 배열 및 return{"age": 18, "name": "tom", "score": [100, 90, 87], "address": {"city": " Changsha", "province": " Hunan"}}content : id=1
# 得到"apple" select json_extract(content,'$[1]') from test_json where id = 2; # 简写,效果同上 select content->'$[1]' from test_json where id = 2; # 结果: +------------------------------+ | json_extract(content,'$[1]') | +------------------------------+ | "apple" | +------------------------------+ +-----------------+ | content->'$[1]' | +-----------------+ | "apple" | +-----------------+ # 解除双引号,得到apple select json_unquote(json_extract(content,'$[1]')) from test_json where id = 2; # 简写,效果同上 select content->>'$[1]' from test_json where id = 2; # 结果: +--------------------------------------------+ | json_unquote(json_extract(content,'$[1]')) | +--------------------------------------------+ | apple | +--------------------------------------------+ +------------------+ | content->>'$[1]' | +------------------+ | apple | +------------------+
- 경로 표현식 *
을 사용하면 여러 경로의 데이터를 배열로 결합하고# 得到:87 select content->'$.score[2]' from test_json where id = 1; # 结果: +-----------------------+ | content->'$.score[2]' | +-----------------------+ | 87 | +-----------------------+ # 得到:18 select content->'$[3].age' from test_json where id = 2; # 结果: +---------------------+ | content->'$[3].age' | +---------------------+ | 18 | +---------------------+
content: id=3
{"name을 반환합니다. ": "tom", "class ": {"id": 3, "name": "1년에 세 수업"}, "friend": [{"age": 20, "name": "marry"}, {"age": 21, " name": "Bob"}], "address": {"city": "Changsha", "name": "Central Park"}}
select json_extract(content,'$.age','$.score') from test_json where id = 1; # 结果: +-----------------------------------------+ | json_extract(content,'$.age','$.score') | +-----------------------------------------+ | [18, [100, 90, 87]] | +-----------------------------------------+ select json_extract(content,'$.name','$.address.province','$.address.city') from test_json where id = 1; # 结果: +----------------------------------------------------------------------+ | json_extract(content,'$.name','$.address.province','$.address.city') | +----------------------------------------------------------------------+ | ["tom", "湖南", "长沙"] | +----------------------------------------------------------------------+
{ “age”: 18, “name”: “tom”, “score”: [100, 90, 87], “address”: {“city”: “Changsha”, “province” : “Hunan”}}
검색 중인 JSON 경로가 하나도 존재하지 않습니다
# 先插入一条用于测试的数据 INSERT INTO `test_json` (`id`,`content`) VALUES(3,'{"name":"tom","address":{"name":"中央公园","city":"长沙"},"class":{"id":3,"name":"一年三班"},"friend":[{"age":20,"name":"marry"},{"age":21,"name":"Bob"}]}')경로에 NULL이 있습니다
# 获取所有二级嵌套中key=name的值 # 由于friend的二级嵌套是一个数组,所以.name获取不到其中的所有name值 select content->'$.*.name' from test_json where id = 3; +----------------------------------+ | content->'$.*.name' | +----------------------------------+ | ["一年三班", "中央公园"] | +----------------------------------+``` # 获取所有key为name值的数据,包括任何嵌套内的name select content->'$**.name' from test_json where id = 3; +---------------------------------------------------------+ | content->'$**.name' | +---------------------------------------------------------+ | ["tom", "一年三班", "marry", "Bob", "中央公园"] | +---------------------------------------------------------+ # 获取数组中所有的name值 select content->'$.friend[*].name' from test_json where id = 3; +-----------------------------+ | content->'$.friend[*].name' | +-----------------------------+ | ["marry", "Bob"] | +-----------------------------+
첫 번째 매개 변수가 JSON 형식 데이터가 아닌 경우 오류가 발생합니다. return
# age路径不存在,返回NULL # 若有多个路径,只要有一个路径存在则不会返回NULL select json_extract(content,'$.price') from test_json where id = 1; +---------------------------------+ | json_extract(content,'$.price') | +---------------------------------+ | NULL | +---------------------------------+
경로 표현식이 표준화되지 않은 경우 오류가 반환됩니다.JSON_EXTRACT 함수는 일반적으로 JSON에서 특정 데이터를 가져오거나 이를 판단 조건으로 사용하는 데 사용됩니다# 存在任意路径为NULL则返回NULL select json_extract(content,'$.age',NULL) from test_json where id = 1; +------------------------------------+ | json_extract(content,'$.age',NULL) | +------------------------------------+ | NULL | +------------------------------------+
5. 사용 시나리오
위 내용은 mysql에서 json_extract를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!