आप अनिवार्य रूप से चयन और प्रक्षेपण लागू करना चाहते हैं। आपके JSON दस्तावेज़ के सरणी तत्वों और ऑब्जेक्ट फ़ील्ड के लिए। आपको सरणी के भीतर "पंक्ति" का चयन करने के लिए WHERE क्लॉज जैसा कुछ करने की आवश्यकता है, और फिर कुछ ऐसा करें जैसे किसी एक फ़ील्ड को चुनना (वह नहीं जिसे आपने अपने चयन मानदंड में उपयोग किया था)।
ये SQL में WHERE क्लॉज और कॉलम की सेलेक्ट-लिस्ट का उपयोग करके किए जाते हैं, लेकिन JSON के साथ ऐसा करना कुछ ऐसा नहीं है जिसे आप JSON_SEARCH () और JSON_CONTAINS () जैसे कार्यों के साथ आसानी से कर सकते हैं।
MySQL 8.0 जो समाधान प्रदान करता है वह है JSON_TABLE()ए> JSON दस्तावेज़ को वर्चुअल व्युत्पन्न तालिका में बदलने के लिए कार्य करता है — जैसे कि आपने पारंपरिक पंक्तियों और स्तंभों को परिभाषित किया था। यह काम करता है यदि JSON आपके द्वारा वर्णित प्रारूप में है, वस्तुओं की एक सरणी।
यहाँ एक डेमो है जो मैंने आपके उदाहरण डेटा को एक तालिका में सम्मिलित करके किया है:
create table mytable ( mycol json );
insert into mytable set mycol = '[{"Race": "Orc", "strength": 14}, {"Race": "Knight", "strength": 7}]';
SELECT j.* FROM mytable, JSON_TABLE(mycol,
'$[*]' COLUMNS (
race VARCHAR(10) PATH '$.Race',
strength INT PATH '$.strength'
)
) AS j;
+--------+----------+
| race | strength |
+--------+----------+
| Orc | 14 |
| Knight | 7 |
+--------+----------+
अब आप वे काम कर सकते हैं जो आप सामान्य रूप से SELECT क्वेरी के साथ करते हैं, जैसे चयन और प्रोजेक्शन:
SELECT j.strength FROM mytable, JSON_TABLE(mycol, '$[*]'
COLUMNS (
race VARCHAR(10) PATH '$.Race',
strength INT PATH '$.strength'
)
) AS j
WHERE j.race = 'Orc'
+----------+
| strength |
+----------+
| 14 |
+----------+
इसमें कुछ समस्याएं हैं:
-
आपको यह हर बार करने की आवश्यकता है आप JSON डेटा को क्वेरी करते हैं, या फिर इसे करने के लिए एक दृश्य बनाते हैं।
-
आपने कहा था कि आप विशेषता फ़ील्ड नहीं जानते हैं, लेकिन JSON_TABLE() क्वेरी लिखने के लिए, आपको उन विशेषताओं को निर्दिष्ट करना होगा जिन्हें आप खोजना चाहते हैं और अपनी क्वेरी में प्रोजेक्ट करना चाहते हैं। आप इसका उपयोग पूरी तरह से अपरिभाषित डेटा के लिए नहीं कर सकते।
मैंने MySQL में JSON का उपयोग करने के बारे में कई समान प्रश्नों का उत्तर दिया है। मैंने देखा है कि जब आप इस तरह का काम करना चाहते हैं, तो एक JSON दस्तावेज़ को तालिका की तरह व्यवहार करना ताकि आप अपने JSON डेटा के फ़ील्ड में WHERE क्लॉज में शर्त लागू कर सकें, तो आपके सभी प्रश्न बहुत अधिक कठिन हो जाते हैं। तब आप महसूस करने लगते हैं कि बेहतर होता कि आप अपनी विशेषताओं को परिभाषित करने के लिए कुछ मिनट खर्च करते ताकि आप सरल प्रश्न लिख सकें।