SqlServer解析XML,解析JSON数据格式

忘是亡心i 2022-05-20 04:39 738阅读 0赞

一:解析XML(SQL2005版本开始支持)

  1. declare @pro_xml varchar(max)=
  2. '<reg>
  3. <node>
  4. <pro_id>3</pro_id>
  5. <pro_sale_num>10</pro_sale_num>
  6. <server_amount>10.00</server_amount>
  7. <express_amount>0.00</express_amount>
  8. </node>
  9. <node>
  10. <pro_id>4</pro_id>
  11. <pro_sale_num>20</pro_sale_num>
  12. <server_amount>20.00</server_amount>
  13. <express_amount>30.00</express_amount>
  14. </node>
  15. <node>
  16. <pro_id>7</pro_id>
  17. <pro_sale_num>30</pro_sale_num>
  18. <server_amount>30.00</server_amount>
  19. <express_amount>40.00</express_amount>
  20. </node>
  21. </reg>'
  22. declare @xml xml=@pro_xml
  23. select * from (
  24. select t.c.value('(pro_id/text())[1]','int') as pro_id,
  25. t.c.value('(pro_sale_num/text())[1]','int') as pro_sale_num,
  26. t.c.value('(server_amount/text())[1]','decimal(18,2)') as server_amount,
  27. t.c.value('(express_amount/text())[1]','decimal(18,2)') as express_amount
  28. from @xml.nodes('/reg/node') as t(c)
  29. ) as T

70

二.解析JSON(SQL2016版本开始支持)

SqlServer对json的功能主要包含 IsJson, Json_Value, Json_Modify, Json_Query

1: IsJson 解析该字符串是否是合法的json格式

格式:IsJson(@express)

  1. declare @pro_json varchar(max)
  2. set @pro_json='[
  3. {"pro_id":3,"pro_sale_num":10,"server_amount":"10.00","express_amount":"5"},
  4. {"pro_id":4,"pro_sale_num":15,"server_amount":"15.00","express_amount":"10"},
  5. {"pro_id":7,"pro_sale_num":20,"server_amount":"20.00","express_amount":"15"}
  6. ]'
  7. select IsJson(@pro_json)

70 1

合法返回1,不合法返回0, 如果表达式为 NULL,则返回NULL

2: Json_Value 从Json字符串中提出标量值

格式:Json_Value (value,’$.column’) from openjson(@express)

注:include_null_values 表示表达式中为NULL,输出NULL

  1. declare @pro_json varchar(max)
  2. set @pro_json='[
  3. {"pro_id":3,"pro_sale_num":10,"server_amount":"10.00","express_amount":"5"},
  4. {"pro_id":4,"pro_sale_num":15,"server_amount":"15.00","express_amount":"10"},
  5. {"pro_id":7,"pro_sale_num":20,"server_amount":"20.00","express_amount":"15"}
  6. ]'
  7. select
  8. JSON_VALUE(value,'$.pro_id') as pro_id,
  9. JSON_VALUE(value,'$.pro_sale_num') as pro_sale_num,
  10. JSON_VALUE(value,'$.server_amount') as server_amount,
  11. JSON_VALUE(value,'$.express_amount') as express_amount
  12. from openjson(@pro_json) include_null_values

3: Json_Query从Json字符串中提取对象或数组

格式:Json_Query(value,’$.object’) from openjson(@express)

  1. declare @pro_json varchar(max)
  2. set @pro_json='[
  3. {"pro_id":3,"pro_sale_num":[{"sale_id":13,"sale_num":103}],"server_amount":"10.00","express_amount":"5"},
  4. {"pro_id":4,"pro_sale_num":[{"sale_id":14,"sale_num":104}],"server_amount":"15.00","express_amount":"10"}
  5. ]'
  6. select JSON_VALUE(value,'$.pro_id'),JSON_QUERY(VALUE,'$.pro_sale_num') from openjson(@pro_json)

70 2

4: json_Modify 更新Json字符串中的属性值,并返回更新的Json字符串

格式:json_Modify(value,’$.column’,newValue) from openjson(@express)

  1. declare @pro_json varchar(max)
  2. set @pro_json=
  3. '[
  4. {"pro_id":3,"pro_sale_num":[{"sale_id":13,"sale_num":103}],"server_amount":"10.00","express_amount":"5"},
  5. {"pro_id":4,"pro_sale_num":[{"sale_id":14,"sale_num":104}],"server_amount":"15.00","express_amount":"10"}
  6. ]'
  7. select JSON_MODIFY(value,'$.pro_id','2') from openjson(@pro_json)

70 3

5:多层复杂的Json解析

  1. declare @pro_json varchar(max)
  2. set @pro_json=
  3. '[
  4. {"pro_id":3,"pro_sale_num":[{"sale_id":13,"sale_num":103}],"server_amount":"10.00","express_amount":"5"},
  5. {"pro_id":4,"pro_sale_num":[{"sale_id":14,"sale_num":104}],"server_amount":"15.00","express_amount":"10"}
  6. ]'
  7. select JSON_VALUE(value,'$.pro_id')as pro_id,
  8. JSON_VALUE(value,'$.server_amount') as server_amount,
  9. JSON_VALUE(value,'$.express_amount') as express_amount,
  10. t.sale_id,t.sale_num
  11. from openJson(@pro_json) as a
  12. cross apply
  13. (select JSON_VALUE(value,'$.sale_id')as sale_id,JSON_VALUE(value,'$.sale_num')as sale_num from openJson(Json_Query(value,'$.pro_sale_num')) as b)
  14. as t

70 4

6:将Json字符串解析为表对象

  1. DECLARE @JsonStr VARCHAR(max)=
  2. '{
  3. "shidu": "33%",
  4. "pm25": 80.0,
  5. "pm10": 127.0,
  6. "quality": "轻度污染",
  7. "wendu": "7",
  8. "ganmao": "儿童、老年人及心脏、呼吸系统疾病患者人群应减少长时间或高强度户外锻炼",
  9. "yesterday": {
  10. "date": "21",
  11. "sunrise": "07:49",
  12. "high": "高温 7.0℃",
  13. "low": "低温 -5.0℃",
  14. "sunset": "18:02",
  15. "aqi": 77.0,
  16. "ymd": "2019-01-21",
  17. "week": "星期一",
  18. "fx": "西风",
  19. "fl": "<3级",
  20. "type": "晴",
  21. "notice": "愿你拥有比阳光明媚的心情"
  22. },
  23. "forecast": [
  24. {
  25. "date": "22",
  26. "sunrise": "07:49",
  27. "high": "高温 10.0℃",
  28. "low": "低温 -5.0℃",
  29. "sunset": "18:03",
  30. "aqi": 104.0,
  31. "ymd": "2019-01-22",
  32. "week": "星期二",
  33. "fx": "西南风",
  34. "fl": "<3级",
  35. "type": "晴",
  36. "notice": "愿你拥有比阳光明媚的心情"
  37. },
  38. {
  39. "date": "23",
  40. "sunrise": "07:48",
  41. "high": "高温 9.0℃",
  42. "low": "低温 -4.0℃",
  43. "sunset": "18:04",
  44. "aqi": 184.0,
  45. "ymd": "2019-01-23",
  46. "week": "星期三",
  47. "fx": "东北风",
  48. "fl": "3-4级",
  49. "type": "晴",
  50. "notice": "愿你拥有比阳光明媚的心情"
  51. },
  52. {
  53. "date": "24",
  54. "sunrise": "07:48",
  55. "high": "高温 5.0℃",
  56. "low": "低温 -3.0℃",
  57. "sunset": "18:05",
  58. "aqi": 262.0,
  59. "ymd": "2019-01-24",
  60. "week": "星期四",
  61. "fx": "南风",
  62. "fl": "<3级",
  63. "type": "多云",
  64. "notice": "阴晴之间,谨防紫外线侵扰"
  65. },
  66. {
  67. "date": "25",
  68. "sunrise": "07:48",
  69. "high": "高温 4.0℃",
  70. "low": "低温 -3.0℃",
  71. "sunset": "18:06",
  72. "aqi": 258.0,
  73. "ymd": "2019-01-25",
  74. "week": "星期五",
  75. "fx": "西风",
  76. "fl": "<3级",
  77. "type": "晴",
  78. "notice": "愿你拥有比阳光明媚的心情"
  79. },
  80. {
  81. "date": "26",
  82. "sunrise": "07:47",
  83. "high": "高温 5.0℃",
  84. "low": "低温 -1.0℃",
  85. "sunset": "18:07",
  86. "aqi": 195.0,
  87. "ymd": "2019-01-26",
  88. "week": "星期六",
  89. "fx": "东北风",
  90. "fl": "<3级",
  91. "type": "多云",
  92. "notice": "阴晴之间,谨防紫外线侵扰"
  93. }
  94. ]
  95. }'
  96. SELECT * FROM OPENJSON(@JsonStr)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWNoYW5nMTk5NTA3MDM_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,738人围观)

还没有评论,来说两句吧...

相关阅读

    相关 XML数据格式原生解析

    由于服务器早已关闭,在此不能看到效果,只能给大家看一下代码,知道如何解析的了,想必大家都知道XML数据格式长得什么样子吧,在此贴出一点XML数据格式 曹操,50|宁教

    相关 java解析JSON格式数据

    现在项目当中用到JSON格式越来越多,之前查过一些解析JSON的资料结果发现都不怎么全,现在整理一下。 注:很多来自于[java解析JSON字符串][java_JSON],我

    相关 数据解析XMLJSON

    大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式。一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据