수색…


소개

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->>pathJSON_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