99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時代SQL server 如何解析json數(shù)組呢?
SQL server 如何解析json數(shù)組呢?
2023-05-09
收藏

SQL Server 提供了許多用于處理 JSON 數(shù)據(jù)的功能,其中之一是解析 JSON 數(shù)組。在此篇文章中,我將會介紹如何在 SQL Server 中解析 JSON 數(shù)組以及一些相關(guān)的注意事項。

JSON 數(shù)組的基本概念

JSON 數(shù)組是一種存儲多個值的方式,每個值都可以是一個簡單的類型(例如字符串、數(shù)字或布爾值)或者是一個復雜的類型(例如對象或其他數(shù)組)。JSON 數(shù)組由方括號 [] 包圍,其中的值使用逗號分隔。

示例:

[ { "name": "John", "age": 30, "city": "New York" }, { "name": "Mary", "age": 25, "city": "Los Angeles" } ] 

以上是一個包含兩個對象的 JSON 數(shù)組,每個對象都有 name、age 和 city 三個屬性。

SQL Server 如何解析 JSON 數(shù)組

SQL Server 提供了 OPENJSON 函數(shù)來解析 JSON 數(shù)據(jù)。通過這個函數(shù),你可以將 JSON 數(shù)組轉(zhuǎn)換成表格形式,每行代表一個數(shù)組元素,每列代表一個屬性。

以下是 OPENJSON 函數(shù)的基本語法:

OPENJSON(json_expression[, path]) [WITH (property_name data_type [,...])]
  • json_expression:要解析的 JSON 字符串或二進制數(shù)據(jù)。
  • path:指定要解析的 JSON 數(shù)組的路徑。如果不指定,默認解析整個 JSON 對象。
  • property_name 和 data_type:指定要從解析結(jié)果中返回的屬性名稱和數(shù)據(jù)類型

示例:

DECLARE @json NVARCHAR(MAX) SET @json = '[{"name": "John","age": 30,"city": "New York"},{"name": "Mary","age": 25,"city": "Los Angeles"}]' SELECT * FROM OPENJSON(@json)

以上 SQL 查詢將會返回以下結(jié)果:

+-----------+-------+-------------+
|   key     | value | type |
+-----------+-------+-------------+
|    0      |   --  |  5 (= JSON_ARRAY)|
|  [0].name | John  | 1 (= JSON_STRING)|
|  [0].age  |  30   | 2 (= JSON_INT)|
| [0].city  | New York | 1 (= JSON_STRING)|
|    1      |   --  |  5 (= JSON_ARRAY)|
|  [1].name | Mary  | 1 (= JSON_STRING)|
|  [1].age  |  25   | 2 (= JSON_INT)|
| [1].city  | Los Angeles | 1 (= JSON_STRING)|
+-----------+-------+-------------+

在上面的查詢中,我們使用了 OPENJSON 函數(shù)來解析 JSON 數(shù)組,并且沒有指定 path 參數(shù)。因此,整個 JSON 對象都被解析了。OPENJSON 函數(shù)返回了一個表格,其中每行代表一個數(shù)組元素,每列代表一個屬性。具體來說,表格包含三列:

注意事項

在使用 OPENJSON 函數(shù)時,需要注意以下幾點:

  1. JSON 數(shù)組必須是有效的 JSON 格式,否則會拋出解析錯誤。
  2. 如果 JSON 數(shù)組中包含了對象數(shù)組,則需要使用嵌套的 OPENJSON 函數(shù)來解析。
  3. OPENJSON 函數(shù)只能返回基本數(shù)據(jù)類型(例如字符串、數(shù)字和布爾值),如果要返回復雜數(shù)據(jù)類型(例如日期時間和 GUID),需要進行一些轉(zhuǎn)換操作。
  4. 如果 JSON 數(shù)組中包含了嵌套的 JSON 數(shù)組,可以使用 CROSS APPLY 子句來展開多維數(shù)組。

總結(jié)

SQL Server 提供了 OPENJSON 函數(shù)來解析 JSON 數(shù)據(jù),可以將 JSON 數(shù)組轉(zhuǎn)換成表格形式,方便后續(xù)的數(shù)據(jù)處理。在

使用 OPENJSON 函數(shù)時,需要注意傳入的 JSON 數(shù)組必須是有效的 JSON 格式,并且如果數(shù)組中包含了對象數(shù)組,則需要使用嵌套的 OPENJSON 函數(shù)來解析。此外,OPENJSON 函數(shù)只能返回基本數(shù)據(jù)類型,如果要返回復雜數(shù)據(jù)類型,需要進行一些轉(zhuǎn)換操作。

在處理多維數(shù)組時,可以使用 CROSS APPLY 子句來展開數(shù)組。以下是一個具有嵌套數(shù)組和對象的示例:

{ "name": "John", "age": 30, "hobbies": [ { "name": "reading", "level": 3 }, { "name": "swimming", "level": 2 } ] } 

我們可以使用如下 SQL 查詢來解析該 JSON 對象:

DECLARE @json NVARCHAR(MAX) SET @json = '{"name": "John","age": 30,"hobbies": [{"name": "reading", "level": 3}, {"name": "swimming", "level": 2}]}' SELECT name, age, hobby_name, hobby_level FROM OPENJSON(@json) WITH (
    name VARCHAR(50),
    age INT,
    hobbies NVARCHAR(MAX) AS JSON
) AS person CROSS APPLY OPENJSON(person.hobbies) WITH (
 hobby_name VARCHAR(50),
 hobby_level INT );

以上 SQL 查詢將會返回以下結(jié)果:

+------+-----+------------+-------------+
| name | age | hobby_name | hobby_level |
+------+-----+------------+-------------+
| John |  30 | reading    |           3 |
| John |  30 | swimming   |           2 |
+------+-----+------------+-------------+

在查詢中,我們使用了 CROSS APPLY 子句來展開 hobbies 數(shù)組,并用嵌套的 WITH 子句來解析數(shù)組中的對象。最終得到包含兩列的結(jié)果集,其中每行代表一個 hobby 興趣。

結(jié)論

SQL Server 中,可以使用 OPENJSON 函數(shù)來解析 JSON 數(shù)組。通過將 JSON 數(shù)組轉(zhuǎn)換為表格形式,可以方便地進行后續(xù)的數(shù)據(jù)處理。在使用 OPENJSON 函數(shù)時,需要注意傳入的 JSON 數(shù)組必須是有效的 JSON 格式,并且如果數(shù)組中包含了對象數(shù)組,則需要使用嵌套的 OPENJSON 函數(shù)來解析。此外,在處理多維數(shù)組時,可以使用 CROSS APPLY 子句來展開數(shù)組。

推薦學習書籍

《**CDA一級教材**》適合CDA一級考生備考,也適合業(yè)務及數(shù)據(jù)分析崗位的從業(yè)者提升自我。完整電子版已上線CDA網(wǎng)校,累計已有10萬+在讀~



免費加入閱讀:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }