SQL Server 将JSON解析成Table
时间: 2024-05-13 14:15:51 浏览: 140
在 SQL Server 2016 及以上版本中,可以通过内置的函数 OPENJSON 来将 JSON 字符串解析成表格形式。
例如,假设有如下 JSON 字符串:
```
{
"name": "张三",
"age": 25,
"skills": [
"Java",
"Python",
"SQL"
]
}
```
可以使用以下 SQL 语句将其解析成表格形式:
```
DECLARE @json NVARCHAR(MAX) = '{
"name": "张三",
"age": 25,
"skills": [
"Java",
"Python",
"SQL"
]
}'
SELECT *
FROM OPENJSON(@json)
WITH (
name NVARCHAR(50),
age INT,
skills NVARCHAR(MAX) AS JSON
)
```
解析结果如下:
```
name | age | skills
-----|-----|--------------------------------------
张三 | 25 | ["Java","Python","SQL"]
```
其中,OPENJSON 函数返回一个包含 JSON 数据的表格,可以使用 WITH 子句指定输出的列名和数据类型。在上面的例子中,我们指定了三个列,分别是 name、age 和 skills。其中,skills 列的数据类型为 NVARCHAR(MAX) AS JSON,表示该列存储的是 JSON 字符串。
需要注意的是,如果 JSON 字符串中包含数组,可以使用 OPENJSON 函数的另一个形式来解析数组。例如,假设有如下 JSON 字符串:
```
{
"name": "张三",
"age": 25,
"skills": [
{
"name": "Java",
"level": "高级"
},
{
"name": "Python",
"level": "中级"
},
{
"name": "SQL",
"level": "初级"
}
]
}
```
可以使用以下 SQL 语句将 skills 数组解析成表格形式:
```
DECLARE @json NVARCHAR(MAX) = '{
"name": "张三",
"age": 25,
"skills": [
{
"name": "Java",
"level": "高级"
},
{
"name": "Python",
"level": "中级"
},
{
"name": "SQL",
"level": "初级"
}
]
}'
SELECT *
FROM OPENJSON(@json, '$.skills')
WITH (
name NVARCHAR(50),
level NVARCHAR(50)
)
```
解析结果如下:
```
name | level
-------|-------
Java | 高级
Python | 中级
SQL | 初级
```
其中,第二个参数 '$.skills' 表示要解析的是 JSON 字符串中的 skills 数组。WITH 子句中指定了两个列,分别是 name 和 level,对应 skills 数组中的每个对象中的 name 和 level 属性。
阅读全文