अगर आप JSON_MODIFY() . का इस्तेमाल कर रहे हैं SQL सर्वर में JSON दस्तावेज़ों को संशोधित करने के लिए फ़ंक्शन, आपको मान . को संशोधित करने के लिए उपयोग किया जा सकता है कुंजी/मान . का हिस्सा संपत्ति। लेकिन क्या आप जानते हैं कि आप कुंजी . को भी संशोधित कर सकते हैं भाग?
ऐसा करने की तरकीब यह है कि मान को एक नई कुंजी में कॉपी करें, फिर पुरानी कुंजी को हटा दें।
नीचे दिए गए उदाहरण।
मूल उदाहरण
मेरा मतलब दिखाने के लिए यहां एक बुनियादी उदाहरण दिया गया है।
-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Name":"Homer"}'
-- Print the current JSON
PRINT @data
-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
JSON_MODIFY(
JSON_MODIFY(@data,'$.Handle', JSON_VALUE(@data,'$.Name')),
'$.Name',
NULL
)
-- Print the new JSON
PRINT @data
परिणाम:
{"Name":"Homer"}
{"Handle":"Homer"}
यह मूल कुंजी/मान युग्म को प्रिंट करता है, उसके बाद नई कुंजी/मान जोड़ी को प्रिंट करता है।
हालांकि हम कह सकते हैं कि हमने कुंजी का "नाम बदल दिया", हमने वास्तव में एक नई कुंजी बनाई, मौजूदा मान को उस नई कुंजी में कॉपी किया, फिर पुरानी कुंजी को NULL पर सेट करके हटा दिया। ।
इस मामले में, हमने JSON_VALUE() . का उपयोग किया है मान निकालने के लिए कार्य करें।
संख्यात्मक मान
डेटा को नई कुंजी में कॉपी करते समय आपको सावधान रहने की आवश्यकता है। डिफ़ॉल्ट रूप से, SQL सर्वर इसे दोहरे उद्धरण चिह्नों में संलग्न करेगा। आप जो चाहते हैं वह हो भी सकता है और नहीं भी।
हालाँकि, यदि आप एक संख्यात्मक मान की प्रतिलिपि बना रहे हैं, तो संभावना है कि आप चाहते हैं कि यह एक संख्यात्मक मान बना रहे (अर्थात दोहरे उद्धरण चिह्नों के बिना)। इस मामले में आपको CAST() . का उपयोग करना होगा इसे एक संख्यात्मक डेटा प्रकार के रूप में डालने के लिए कार्य करें। यहां एक उदाहरण दिया गया है:
-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Residents":768}'
-- Print the current JSON
PRINT @data
-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
JSON_MODIFY(
JSON_MODIFY(@data,'$.Population', CAST(JSON_VALUE(@data,'$.Residents') AS int)),
'$.Residents',
NULL
)
-- Print the new JSON
PRINT @data
परिणाम:
{"Residents":768}
{"Population":768}
तो परिणामी मान एक संख्या है।
अगर हम CAST() . को हटा दें उस उदाहरण से कार्य करते हैं, हम इसके साथ समाप्त होते हैं:
-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Residents": 768}'
-- Print the current JSON
PRINT @data
-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
JSON_MODIFY(
JSON_MODIFY(@data,'$.Population', JSON_VALUE(@data,'$.Residents')),
'$.Residents',
NULL
)
-- Print the new JSON
PRINT @data
परिणाम:
{"Residents": 768}
{"Population":"768"}
इसलिए इस मामले में, हमने केवल कुंजी का नाम नहीं बदला, हमने (JSON) डेटा प्रकार को एक संख्या से एक स्ट्रिंग में भी बदल दिया।
ध्यान दें कि JSON विभिन्न संख्यात्मक प्रकारों के बीच अंतर नहीं करता है। इसका केवल एक संख्यात्मक प्रकार है:संख्या।
रिक्त स्थान वाली कुंजियां
इस उदाहरण में, मैं एक मौजूदा कुंजी का नाम बदलकर एक नई कुंजी करता हूं जिसमें एक स्थान होता है (इसमें दो शब्द होते हैं, जो एक स्थान से अलग होते हैं)।
चूंकि नई कुंजी में एक स्थान है, इसलिए मुझे कुंजी को दोहरे उद्धरण चिह्नों से घेरना होगा। अगर मैं ऐसा नहीं करता तो एक त्रुटि हो जाएगी।
-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Population":68}'
-- Print the current JSON
PRINT @data
-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
JSON_MODIFY(
JSON_MODIFY(@data,'$."Average IQ"', CAST(JSON_VALUE(@data,'$.Population') AS int)),
'$.Population',
NULL
)
-- Print the new JSON
PRINT @data
परिणाम:
{"Population":68}
{"Average IQ":68}
नेस्टेड प्रॉपर्टी
अगर संपत्ति नेस्टेड है, कोई समस्या नहीं है। इसे संदर्भित करने के लिए बस डॉट-नोटेशन का उपयोग करें।
DECLARE @data NVARCHAR(4000)
SET @data=N'{
"Suspect": {
"Name": "Homer Simpson",
"Hobbies": ["Eating", "Sleeping", "Base Jumping"]
}
}'
PRINT @data
SET @data=
JSON_MODIFY(
JSON_MODIFY(@data,'$.Suspect.Qualifications', JSON_QUERY(@data,'$.Suspect.Hobbies')),
'$.Suspect.Hobbies',
NULL
)
PRINT @data
परिणाम:
{
"Suspect": {
"Name": "Homer Simpson",
"Hobbies": ["Eating", "Sleeping", "Base Jumping"]
}
}
{
"Suspect": {
"Name": "Homer Simpson"
,"Qualifications":["Eating", "Sleeping", "Base Jumping"]}
}
आपने यह भी देखा होगा कि यह उदाहरण JSON_QUERY() . का उपयोग करता है JSON_VALUE() . के बजाय मान निकालने के लिए कार्य करें पिछले उदाहरणों की तरह।
ऐसा इसलिए है क्योंकि इस मामले में हम एक सरणी निकाल रहे हैं और JSON_VALUE() एक संपूर्ण सरणी नहीं निकाल सकता (यह केवल सरणी से एक अदिश मान निकाल सकता है)। JSON_QUERY() दूसरी ओर, फ़ंक्शन वस्तुओं और सरणियों को निकालता है, लेकिन अदिश मान नहीं।
इसके बारे में अधिक पढ़ने के लिए, देखें JSON_QUERY() बनाम JSON_VALUE() :क्या अंतर है?