亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解JSON1:使用TSQL查詢數據和更新JSON數據

2019-11-19 18:55:02
字體:
來源:轉載
供稿:網友

JSON是一個非常流行的,用于數據交換的數據格式,主要用于Web和移動應用程序中。JSON 使用鍵/值對(Key:Value pair)存儲數據,并且表示嵌套鍵值對和數組兩種復雜數據類型,僅僅使用逗號(引用Key)和中括號(引用數組元素),就能路由到指定的屬性或成員,使用簡單,功能強大。在SQL Server 2016版本中支持JSON格式,使用Unicode字符類型表示JSON數據,并能對JSON數據進行驗證,查詢和修改。推薦一款JSON驗證和格式化的工具:json formatter。

一,定義和驗證JSON數據

使用nvarchar表示JSON數據,通過函數ISJSON函數驗證JSON數據是否有效。

declare @json nvarchar(max)set @json = N'{ "info":{   "type":1,  "address":{   "town":"bristol",  "county":"avon",  "country":"england"  },  "tags":["sport", "water polo"] }, "type":"basic"}'select isjson(@json)

ISJSON 函數的格式是: ISJSON ( expression ) ,返回1,表示字符串是JSON數據;返回0,表示字符串不是JSON數據;返回NULL,表示 expression是NULL;

二,JSON 數據的PATH 表達式

Path 表達式分為兩部分:Path Mode和Path。Path Mode是可選的(optional),有兩種模式:lax和strict。

1,Path Mode

在Path 表達式的開始,可以通過lax 或 strict 關鍵字顯式聲明Path Mode,如果不聲明,默認的Path Mode是lax。在lax 模式下,如果path表達式出錯,那么JSON函數返回NULL。在strict模式下,如果Path表達式出錯,那么JSON函數拋出錯誤;

2,Path 表達式

Path是訪問JSON數據的途徑,有四種運算符:

  • $:代表整個JSON 數據的內容;
  • 逗號 . :表示JSON對象的成員,也叫做,字段(Field),或Key;
  • 中括號 [] :表示數組中的元素,元素的起始位置是0;
  • Key Name:鍵的名字,通過Key Name來引用對應的Value;如果Key Name中包含空格,$,逗號,中括號,使用雙引號;

例如,有如下JSON 數據,通過Path表達式,能夠路由到JSON的各個屬性:

{ "people":  [  { "name": "John", "surname": "Doe" },  { "name": "Jane", "surname": null, "active": true }  ] }

Path表達式查詢的數據是:

  • $:表示JSON的內容,是最外層大括號中的所有Item,本例是一個people數組,數組的下標是從0開始的;
  • $.people[0]:表示people數組的第一元素:{ "name": "Jane", "surname": null, "active": true }
  • $.people[0].name :從people數組的第一個元素中,查詢Key是Name的Item對應的數據,本例是John;
  • $.people[1].surname:people數組中部存在surname 字段,由于該Path 表達式沒有聲明Path Mode,默認值是lax,當Path表達式出現錯誤時,返回NULL;

三,通過Path查詢JSON數據

1,查詢標量值(JSON_VALUE)

使用 JSON_VALUE(expression , path ) 函數,從JSON數據,根據Path 參數返回標量值,返回的數據是字符類型。

declare @json nvarchar(max)set @json = N'{ "info":{   "type":1,  "address":{   "town":"bristol",  "county":"avon",  "country":"england"  },  "tags":["sport", "water polo"] }, "type":"basic"}'select json_value(@json, '$.type') as type, json_value(@json, '$.info.type') as info_type, json_value(@json, '$.info.address.town') as town, json_value(@json, '$.info.tags[0]') as tag


 2,返回JSON數據(JSON_QUERY)

使用 JSON_QUERY ( expression [ , path ] ) 函數,根據Path 參數,返回JSON 數據(JSON fragment);參數path是可選的(optional),如果不指定option參數,那么默認的path是$,即,返回整個JSON數據。

declare @json nvarchar(max)set @json = N'{ "info":{   "type":1,  "address":{   "town":"bristol",  "county":"avon",  "country":"england"  },  "tags":["sport", "water polo"] }, "type":"basic"}'select json_query(@json, '$') as json_context, json_query(@json, '$.info') as info, json_query(@json, '$.info.address') as info_address, json_query(@json, '$.info.tags') as info_tags

四,通過Path修改JSON數據

使用 JSON_MODIFY ( expression , path , newValue ) 修改JSON數據中的屬性值,并返回修改之后的JSON數據,該函數修改JSON數據的流程是:

  • 修改現有的屬性:按照參數path從JSON數據中找到指定的屬性,將該屬性的Value修改為參數newValue,返回值是修改之后的JSON數據;
  • 新增新的鍵值對(Key:Value pair):如果JSON數據中不存在指定的屬性,那么按照參數Path,在指定的路徑上新增鍵值對;
  • 刪除鍵值對(Key:Value pair):如果參數newValue的值是NULL,那么表示從JSON數據中刪除指定的屬性;
  • append 關鍵字:用于從JSON數組中,追加一個元素;

示例,對JSON數據進行update,insert,delete和追加數據元素

declare @info nvarchar(100) = '{"name":"john","skills":["c#","sql"]}' -- update name set @info = json_modify(@info, '$.name', 'mike') -- insert surname set @info = json_modify(@info, '$.surname', 'smith') -- delete name set @info = json_modify(@info, '$.name', null) -- add skill set @info = json_modify(@info, 'append $.skills', 'azure')

五,將JSON數據轉換為關系表

OPENJSON函數是一個行集函數(RowSet),能夠將JSON數據轉換為關系表,

OPENJSON( jsonExpression [ , path ] ) [  WITH (   colName type [ column_path ] [ AS JSON ]  [ , colName type [ column_path ] [ AS JSON ] ]  [ , . . . n ]   ) ]
  • path 參數:也叫table path,指定關系表在JSON數據中的路徑;
  • column_path 參數:基于path參數,指定每個column在關系表JSON中的路徑,應總是顯式指定column path;
  • AS JSON 屬性:如果指定AS JSON屬性,那么 column的數據類型必須定義為nvarchar(max),表示該column的值是JSON數據;如果不指定AS JSON屬性,那么該Column的值是標量值;
  • with 選項:指定關系表的Schema,應總是指定with選項;如果不指定with 選項,那么函數返回key,value和type三列;

示例,從JSON數據中,以關系表方式呈現數據

declare @json nvarchar(max)set @json = N'{ "info":{   "type":1,  "address":{   "town":"bristol",  "county":"avon",  "country":"england"  },  "tags":["sport", "water polo"] }, "type":"basic"}'SELECT info_type,info_address,tagsFROM OPENJSON(@json, '$.info') with (info_type tinyint 'lax $.type',info_address nvarchar(max) 'lax $.address' as json,tags nvarchar(max) 'lax $.tags' as json)

六,將關系表數據以JSON格式存儲

通過For JSON  Auto/Path,將關系表數據存儲為JSON格式,

  • Auto 模式:根據select語句中column的順序,自動生成JSON數據的格式;
  • Path 模式:使用column name的格式來生成JSON數據的格式,column name使用逗號分隔(dot-separated)表示組-成員關系;


1,以Auto 模式生成JSON格式

select id, name, categoryfrom dbo.dt_jsonfor json auto,root('json')

返回的數據格式是

{  "json":[   {    "id":1,   "name":"C#",   "category":"Computer"  },  {    "id":2,   "name":"English",   "category":"Language"  },  {    "id":3,   "name":"MSDN",   "category":"Web"  },  {    "id":4,   "name":"Blog",   "category":"Forum"  } ]}

2,以Path模式生成JSON格式

select id as 'book.id', name as 'book.name', category as 'product.category'from dbo.dt_jsonfor json path,root('json')

返回的數據格式是:

{"json":[{"book":{"id":1,"name":"C#"},"product":{"category":"Computer"}},{"book":{"id":2,"name":"English"},"product":{"category":"Language"}},{"book":{"id":3,"name":"MSDN"},"product":{"category":"Web"}},{"book":{"id":4,"name":"Blog"},"product":{"category":"Forum"}}]}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线视频免费| 美女精品视频一区| 欧美成年人视频网站| 日韩亚洲精品视频| 在线日韩精品视频| 91手机视频在线观看| 中文字幕一区日韩电影| 国产精品视频导航| 亚洲美女性视频| 亚洲白拍色综合图区| 美日韩精品免费观看视频| 成人免费淫片视频软件| 日韩中文在线中文网三级| 国语自产精品视频在线看| 亚洲天堂成人在线视频| www国产精品视频| 欧美大片在线看免费观看| 久久伊人精品天天| 在线精品高清中文字幕| 色噜噜狠狠狠综合曰曰曰88av| 美女视频久久黄| 操人视频在线观看欧美| 97精品伊人久久久大香线蕉| 最近2019免费中文字幕视频三| 欧美日韩一区二区在线播放| 激情成人在线视频| 国产精品久久电影观看| 中文字幕在线日韩| 在线电影av不卡网址| 日韩精品免费观看| 日韩欧美在线国产| 欧美激情在线视频二区| 欧美三级xxx| 亚洲跨种族黑人xxx| 高清日韩电视剧大全免费播放在线观看| 欧美xxxx18性欧美| 亚洲天堂av高清| 成人精品久久久| 国产自产女人91一区在线观看| 91亚洲精品一区二区| 亚洲国语精品自产拍在线观看| 亚洲精品久久视频| 中文字幕亚洲综合| 国产精品久久久久9999| 亚洲精品电影在线观看| 久久亚洲精品小早川怜子66| 亚洲国产精品久久久久久| 久久久亚洲国产| 亚洲欧美日韩一区二区三区在线| 亚洲综合第一页| 中文字幕精品影院| 亚洲美女精品成人在线视频| 97成人超碰免| 午夜剧场成人观在线视频免费观看| 91久久国产精品91久久性色| 最新国产精品亚洲| 亚洲欧美第一页| 国产a级全部精品| 国产一区二区三区在线播放免费观看| 日本19禁啪啪免费观看www| 国产中文字幕亚洲| 日韩欧美a级成人黄色| 欧美成人精品在线播放| 亚洲护士老师的毛茸茸最新章节| 亚洲成人精品在线| 日韩精品免费在线视频观看| 国产精品网站入口| 色综合久久久久久中文网| 午夜精品理论片| 国产精品极品尤物在线观看| 亚洲精品在线视频| 国产欧美日韩丝袜精品一区| 亚洲精品国产综合久久| 国产盗摄xxxx视频xxx69| 国产精品久久久久久av| 欧美性猛交xxxx乱大交极品| 中文字幕日韩精品有码视频| 欧美日韩成人免费| 亚洲精品福利视频| 日韩中文字幕在线观看| 久久久久久亚洲| 日韩精品一区二区视频| 亚洲人成电影在线观看天堂色| 国产一区二区三区日韩欧美| 精品视频在线导航| 日韩a**站在线观看| 久久久久国产精品一区| 日韩精品在线视频美女| 伊人伊成久久人综合网站| 亚洲成人av中文字幕| 成人中文字幕在线观看| 国产成人免费91av在线| 国产亚洲人成a一在线v站| 国产日韩av在线| 亚洲网站在线看| 亚洲第一区第二区| 亚洲国产精品久久精品怡红院| 在线性视频日韩欧美| 国产精品免费视频xxxx| 亚洲欧洲免费视频| 中文字幕亚洲一区二区三区五十路| 国产午夜精品一区二区三区| 亚洲精品视频久久| 亚洲欧洲日产国产网站| 中文字幕久热精品在线视频| 久久国产精品99国产精| 琪琪亚洲精品午夜在线| 欧美午夜视频一区二区| 久久精品美女视频网站| 夜夜嗨av一区二区三区免费区| 久久97精品久久久久久久不卡| 91tv亚洲精品香蕉国产一区7ujn| www高清在线视频日韩欧美| 欧美性猛交xxxx免费看漫画| 久久久999成人| 91最新在线免费观看| 亚洲美女免费精品视频在线观看| 国产成人一区二区三区电影| 在线国产精品播放| 国模精品一区二区三区色天香| 欧美亚洲一区在线| 久久久精品视频在线观看| 中文字幕欧美在线| 精品国产乱码久久久久久天美| 国产精品看片资源| 亚洲欧美日本伦理| 欧美一区二三区| 久久在线免费观看视频| 国产精品欧美日韩久久| 精品国产一区二区三区久久狼5月| 国产精品永久免费在线| 2023亚洲男人天堂| 国语自产精品视频在线看一大j8| 久久人人爽人人爽人人片av高清| 中文字幕av一区二区三区谷原希美| 国产区精品视频| 高清欧美性猛交| 亚洲色图狂野欧美| 日韩av理论片| 欧美一级在线播放| 亚洲2020天天堂在线观看| 亚洲免费视频网站| 国产精品久久久91| 日韩电影中文字幕在线| 国产极品jizzhd欧美| 日韩精品在线视频| 久久精品国产久精国产思思| 日韩欧美综合在线视频| 日韩在线播放av| 宅男66日本亚洲欧美视频| 欧美激情伊人电影| 自拍偷拍亚洲区| 国产成人97精品免费看片| 日本免费久久高清视频| 国产成人福利夜色影视| 欧美日韩在线视频一区| 欧美肥臀大乳一区二区免费视频| 国产精品美女视频网站| 国内成人精品视频| 国内精久久久久久久久久人| 97在线视频免费看| 亚洲欧美日韩天堂一区二区| 国内精品视频一区| 国产视频久久久久久久|