MySQL
JSON 유형에서 값 추출
수색…
소개
MySQL 5.7.8+는 네이티브 JSON 타입을 지원합니다. json 객체를 생성하는 여러 가지 방법이 있지만 다른 방법으로 멤버에 액세스하고 읽을 수 있습니다.
주요 함수는 JSON_EXTRACT
이므로 ->
및 ->>
연산자가 더 친숙합니다.
통사론
- JSON_EXTRACT (json_doc, 경로 [, ...])
- JSON_EXTRACT (json_doc, path)
- JSON_EXTRACT (json_doc, path1, path2)
매개 변수
매개 변수 | 기술 |
---|---|
json_doc | 유효한 JSON 문서 |
통로 | 회원 경로 |
비고
MySQL 5.7 레퍼런스 매뉴얼 에서 언급 됨
- 경로 인수 별 여러 일치 값
이러한 인수가 여러 값을 반환 할 수있는 경우 일치하는 값은 생성 된 경로에 해당하는 순서로 배열로 자동 포장됩니다. 그렇지 않으면 반환 값은 일치하는 단일 값입니다.
-
NULL
결과 :- 어떤 argemunt도 NULL이다.
- 일치하지 않는 경로
인수가 NULL이거나 문서의 값을 찾는 경로가 없으면 NULL을 반환합니다.
JSON 배열 값 읽기
JSON 유형으로 @myjson 변수를 작성하십시오 ( 자세히 ).
SET @myjson = CAST('["A","B",{"id":1,"label":"C"}]' as JSON) ;
일부 회원을 SELECT
!
SELECT
JSON_EXTRACT( @myjson , '$[1]' ) ,
JSON_EXTRACT( @myjson , '$[*].label') ,
JSON_EXTRACT( @myjson , '$[1].*' ) ,
JSON_EXTRACT( @myjson , '$[2].*')
;
-- result values:
'\"B\"', '[\"C\"]', NULL, '[1, \"C\"]'
-- visually:
"B", ["C"], NULL, [1, "C"]
JSON 추출 연산자
->
또는 ->>
연산자 path
를 추출하고, ->>
는 UNQUOTED 값 :
SELECT
myjson_col->>'$[1]' , myjson_col->'$[1]' ,
myjson_col->>'$[*].label' ,
myjson_col->>'$[1].*' ,
myjson_col->>'$[2].*'
FROM tablename ;
-- visuall:
B, "B" , ["C"], NULL, [1, "C"]
--^^^ ^^^
그래서 col->>path
는 JSON_UNQUOTE(JSON_EXTRACT(col,path))
와 JSON_UNQUOTE(JSON_EXTRACT(col,path))
.
-> 연산자와 마찬가지로, 다음 예제와 같이 - >> 연산자는 항상 EXPLAIN 출력에서 확장됩니다.
mysql> EXPLAIN SELECT c->>'$.name' AS name -> FROM jemp WHERE g > 2\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: jemp partitions: NULL type: range possible_keys: i key: i key_len: 5 ref: NULL rows: 2 filtered: 100.00 Extra: Using where 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Note Code: 1003 Message: /* select#1 */ select json_unquote(json_extract(`jtest`.`jemp`.`c`,'$.name')) AS `name` from `jtest`.`jemp` where (`jtest`.`jemp`.`g` > 2) 1 row in set (0.00 sec)
인라인 경로 추출 (+) 에 대한 정보 읽기
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow