我遇到了一些问题。我不知道如何读取JSON对象列表中的所有节点。
我有3个带有标题[item1, item2, item3]
的项目(对象)。
我需要获取项目的名称和所有内部字段,例如:table screenshot
这是源JSON数据:
{
"item1": {
"title": "2",
"value": null,
"visible": true,
"name": "item1",
"enabled": true,
"readonly": false,
"id": "f1f46ce6-9d0b-4eaf-88b7-d35b23a4d2e4"
},
"item2": {
"title": null,
"value": null
"visible": true,
"name": "item2",
"enabled": true,
"readonly": false,
"id": "da2b8a02-cfbd-4de8-8a33-74e2a484475a"
},
"item3": {
"title": "",
"value": null,
"visible": true,
"name": "item3",
"enabled": true,
"readonly": false,
"id": "57ee45d6-41d7-45c2-b022-13220e31d2d2"
}
}
我找到了如何使用 OPENJSON()或 JSON_VALUE()功能进行操作,但我仍然无法遍历所有项目。
SELECT * FROM OPENJSON (@json, '$.item1')
WITH (
ItemName VARCHAR(100) '$',
Title VARCHAR(100) '$.name',
Value VARCHAR(100) '$.value',
Visible VARCHAR(100) '$.visible',
Name VARCHAR(100) '$.name',
Enabled VARCHAR(100) '$.enabled',
ReadOnly VARCHAR(100) '$.readonly',
Id VARCHAR(500) '$.id'
)
答案 0 :(得分:0)
这样的东西?
SELECT [Key].[key] AS [ItemName], [Value].*
FROM OPENJSON (@json, '$') AS [Key]
CROSS APPLY OPENJSON([Key].value)
WITH (
Title VARCHAR(100) '$.title',
Value VARCHAR(100) '$.value',
Visible VARCHAR(100) '$.visible',
Name VARCHAR(100) '$.name',
Enabled VARCHAR(100) '$.enabled',
ReadOnly VARCHAR(100) '$.readonly',
Id VARCHAR(500) '$.id'
) AS [Value]
"技巧"是交叉应用于子对象json图。