खोज…


परिचय

MySQL 5.7.8+ देशी JSON प्रकार का समर्थन करता है। जब आपके पास json ऑब्जेक्ट्स बनाने के लिए अलग-अलग तरीके हैं, तो आप सदस्यों को विभिन्न तरीकों से एक्सेस और पढ़ सकते हैं, भी।

मुख्य कार्य JSON_EXTRACT , इसलिए -> और ->> ऑपरेटर अधिक अनुकूल हैं।

वाक्य - विन्यास

  • JSON_EXTRACT (json_doc, पथ [...])
  • JSON_EXTRACT (json_doc, पथ)
  • JSON_EXTRACT (json_doc, path1, Path2)

पैरामीटर

पैरामीटर विवरण
json_doc वैध JSON दस्तावेज़
पथ सदस्य पथ

टिप्पणियों

MySQL 5.7 संदर्भ मैनुअल में उल्लेख किया गया

  • पथ तर्क द्वारा एकाधिक मिलान किए गए मान

यदि यह संभव है कि वे तर्क कई मानों को वापस कर सकते हैं, तो मिलान किए गए मान एक सरणी के रूप में स्वतः उत्पन्न होते हैं, उसी क्रम में जो उन्हें उत्पन्न करता है। अन्यथा, वापसी मान एकल मिलान किया गया मान है।

  • 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)) बराबर है:

जैसा कि ->, - - >> ऑपरेटर हमेशा 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