json - MS SQL Server 2016 使用 JSON 方法获取值
问题描述
这可能是我没有看到的一些愚蠢的东西,但我无法按照我预期的方式获得JSON_VALUE
或JSON_QUERY
工作:
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT *
FROM OPENJSON(@json)
返回正确的 3 行。
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json
, JSON_VALUE(@json, '$') label
, JSON_QUERY(@json, '$') label2
返回 1 行,但label
isNULL
并label2
显示整个字符串。好的但是:
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json
, JSON_VALUE(@json, '$.1031') label
, JSON_QUERY(@json, '$.1033') label2
返回 0 行。
编辑
我确实希望得到这样的结果:
is_json, label, label2
1, test-de, test-en
解决方案
由于您的密钥以数字开头,因此您需要引用它。我想你追求的是:
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) AS is_json,
JSON_VALUE(@json, '$."1031"') AS label,
JSON_VALUE(@json, '$."1033"') AS label2;
或者,您可以使用WITH
:
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json,
J.label1,
J.label2
FROM OPENJSON(@json)
WITH (label1 varchar(7) '$."1031"',
label2 varchar(7) '$."1033"') J;
推荐阅读
- php - 即使成功后,ajax成功调用执行else条件
- python - 使用马尔可夫链将RGB图像转换为黑白(0-1)
- javascript - 如何以角度传递 Javascript 变量(JSON 数据)以在表中加载动态数据
- asp.net-core - .Net5 vs .Net Core 3 我应该选择哪一个作为目标
- xml - 增加 Tab 和 TabLayout 之间的间隙
- c# - 将“MM/yy”转换为日期时间c#
- ios - 日期格式无法正常工作 - 字符串到日期的转换
- processing - 如何在两个类之间进行碰撞?
- python - 是否可以在 Libreoffice Calc 中使用 Selenium WebDriver?
- git - 如何在 git 中删除不再需要的分支?