Microsoft SQL Server
JSON पाठ संशोधित करें
खोज…
निर्दिष्ट पथ पर JSON पाठ में मान संशोधित करें
JSON_MODIFY फ़ंक्शन इनपुट पैरामीटर के रूप में JSON टेक्स्ट का उपयोग करता है, और तीसरे तर्क का उपयोग करके निर्दिष्ट पथ पर एक मूल्य को संशोधित करता है:
declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car","Price":34.99}'
set @json = JSON_MODIFY(@json, '$.Price', 39.99)
print @json -- Output: {"Id":1,"Name":"Toy Car","Price":39.99}
नतीजतन, हमारे पास "मूल्य" के साथ नया JSON टेक्स्ट होगा: 39.99 और अन्य मूल्य नहीं बदले जाएंगे। यदि निर्दिष्ट पथ पर ऑब्जेक्ट मौजूद नहीं है, तो JSON_MODIFY कुंजी: वैल्यू पेयर डालेगा।
कुंजी को हटाने के लिए: वैल्यू पेयर, NULL को नए मान के रूप में रखें:
declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car","Price":34.99}'
set @json = JSON_MODIFY(@json, '$.Price', NULL)
print @json -- Output: {"Id":1,"Name":"Toy Car"}
JSON_MODIFY डिफ़ॉल्ट रूप से कुंजी को नष्ट कर देगा यदि इसका मूल्य नहीं है तो आप इसे एक कुंजी को हटाने के लिए उपयोग कर सकते हैं।
एक स्केल मान को JSON सरणी में जोड़ें
JSON_MODIFY में 'एपेंड' मोड है, जो ऐरे में वैल्यू जोड़ता है।
declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car","Tags":["toy","game"]}'
set @json = JSON_MODIFY(@json, 'append $.Tags', 'sales')
print @json -- Output: {"Id":1,"Name":"Toy Car","Tags":["toy","game","sales"]}
यदि निर्दिष्ट पथ पर सरणी मौजूद नहीं है, तो JSON_MODIFY (परिशिष्ट) एक एकल तत्व के साथ नया सरणी बनाएगा:
declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car","Price":34.99}'
set @json = JSON_MODIFY(@json, 'append $.Tags', 'sales')
print @json -- Output {"Id":1,"Name":"Toy Car","Tags":["sales"]}
JSON टेक्स्ट में नया JSON ऑब्जेक्ट डालें
JSON_MODIFY फ़ंक्शन आपको JSON टेक्स्ट में JSON ऑब्जेक्ट्स सम्मिलित करने में सक्षम बनाता है:
declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car"}'
set @json = JSON_MODIFY(@json, '$.Price',
JSON_QUERY('{"Min":34.99,"Recommended":45.49}'))
print @json
-- Output: {"Id":1,"Name":"Toy Car","Price":{"Min":34.99,"Recommended":45.49}}
चूँकि तीसरा पैरामीटर टेक्स्ट है जिसे आपको JSON_QUERY फ़ंक्शन के साथ JSON को "कास्ट" टेक्स्ट में लपेटने की आवश्यकता है। इस "कास्ट" के बिना, JSON_MODIFY सादे पैरामीटर के रूप में तीसरे पैरामीटर का इलाज करेगा और इसे स्ट्रिंग मान के रूप में डालने से पहले वर्णों से बच जाएगा। बिना JSON_QUERY के परिणाम होंगे:
{"Id":1,"Name":"Toy Car","Price":'{\"Min\":34.99,\"Recommended\":45.49}'}
JSON_MODIFY इस ऑब्जेक्ट को सम्मिलित करेगा यदि यह मौजूद नहीं है, या इसे हटा दें यदि तीसरा पैरामीटर का मान NULL है।
JSON क्वेरी के लिए उत्पन्न नई JSON सरणी डालें
आप JSON क्लॉज़ के साथ मानक चयन क्वेरी का उपयोग करके JSON ऑब्जेक्ट उत्पन्न कर सकते हैं और इसे JSON टेक्स्ट में तीसरे पैरामीटर के रूप में सम्मिलित कर सकते हैं:
declare @json nvarchar(4000) = N'{"Id":17,"Name":"WWI"}'
set @json = JSON_MODIFY(@json, '$.tables',
(select name from sys.tables FOR JSON PATH) )
print @json
(1 row(s) affected)
{"Id":1,"Name":"master","tables":[{"name":"Colors"},{"name":"Colors_Archive"},{"name":"OrderLines"},{"name":"PackageTypes"},{"name":"PackageTypes_Archive"},{"name":"StockGroups"},{"name":"StockItemStockGroups"},{"name":"StockGroups_Archive"},{"name":"StateProvinces"},{"name":"CustomerTransactions"},{"name":"StateProvinces_Archive"},{"name":"Cities"},{"name":"Cities_Archive"},{"name":"SystemParameters"},{"name":"InvoiceLines"},{"name":"Suppliers"},{"name":"StockItemTransactions"},{"name":"Suppliers_Archive"},{"name":"Customers"},{"name":"Customers_Archive"},{"name":"PurchaseOrders"},{"name":"Orders"},{"name":"People"},{"name":"StockItems"},{"name":"People_Archive"},{"name":"ColdRoomTemperatures"},{"name":"ColdRoomTemperatures_Archive"},{"name":"VehicleTemperatures"},{"name":"StockItems_Archive"},{"name":"Countries"},{"name":"StockItemHoldings"},{"name":"sysdiagrams"},{"name":"PurchaseOrderLines"},{"name":"Countries_Archive"},{"name":"DeliveryMethods"},{"name":"DeliveryMethods_Archive"},{"name":"PaymentMethods"},{"name":"SupplierTransactions"},{"name":"PaymentMethods_Archive"},{"name":"TransactionTypes"},{"name":"SpecialDeals"},{"name":"TransactionTypes_Archive"},{"name":"SupplierCategories"},{"name":"SupplierCategories_Archive"},{"name":"BuyingGroups"},{"name":"Invoices"},{"name":"BuyingGroups_Archive"},{"name":"CustomerCategories"},{"name":"CustomerCategories_Archive"}]}
JSON_MODIFY को पता चलेगा कि JSON क्लॉज़ के साथ चुनिंदा क्वेरी मान्य JSON सरणी उत्पन्न करता है और यह केवल JSON टेक्स्ट में सम्मिलित करेगा।
आप बिना , बिना क्वेरी के सभी JSON विकल्पों का उपयोग कर सकते हैं, बिना without_ARRAY_WRAPPER , जो JSON सरणी के बजाय एकल ऑब्जेक्ट उत्पन्न करेगा। इस विषय में अन्य उदाहरण देखें कि सिंगल JSON ऑब्जेक्ट कैसे डालें।
JSON क्लॉज़ के साथ उत्पन्न एकल JSON ऑब्जेक्ट सम्मिलित करें
आप JSON क्लॉज और withOUT_ARRAY_WRAPPER विकल्प के साथ मानक चयन क्वेरी का उपयोग करके JSON ऑब्जेक्ट उत्पन्न कर सकते हैं, और JSON टेक्स्ट में तीसरे पैरामीटर के रूप में सम्मिलित कर सकते हैं:
declare @json nvarchar(4000) = N'{"Id":17,"Name":"WWI"}'
set @json = JSON_MODIFY(@json, '$.table',
JSON_QUERY(
(select name, create_date, schema_id
from sys.tables
where name = 'Colors'
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)))
print @json
(1 row(s) affected)
{"Id":17,"Name":"WWI","table":{"name":"Colors","create_date":"2016-06-02T10:04:03.280","schema_id":13}}
JSON के बिना withOUT_ARRAY_WRAPPER के कारण अमान्य JSON टेक्स्ट उत्पन्न हो सकता है यदि SELECT क्वेरी एक से अधिक परिणाम देता है (आपको इस मामले में प्राथमिक कुंजी द्वारा TOP 1 या फ़िल्टर का उपयोग करना चाहिए)। इसलिए, JSON_MODIFY मान लेगा कि लौटा हुआ परिणाम सिर्फ एक सादा पाठ है और यदि आप इसे JSON_QUERY फ़ंक्शन के साथ नहीं लपेटते हैं तो किसी भी अन्य पाठ की तरह बच सकते हैं।
JSON को परिणाम देने के लिए आपको JSON_QUERY फ़ंक्शन के बिना , JSON के बिना लपेटे बिना, JAR_QUERY फ़ंक्शन के साथ रैप करना चाहिए।