JSON 文本格式不正确。在位置 0 发现意外字符 'N'
JSON text is not properly formatted. Unexpected character 'N' is found at position 0
我是 SQL 中 JSON 的新手。执行以下 -
时出现错误 "JSON text is not properly formatted. Unexpected character 'N' is found at position 0."
DECLARE @json1 NVARCHAR(4000)
set @json1 = N'{"name":[{"FirstName":"John","LastName":"Doe"}], "age":31, "city":"New York"}'
DECLARE @v NVARCHAR(4000)
set @v = CONCAT('N''',(SELECT value FROM OPENJSON(@json1, '$.name')),'''')
--select @v as 'v'
SELECT JSON_VALUE(@v,'$.FirstName')
“select @v as 'v'”给了我
N'{"FirstName":"John","LastName":"Doe"}'
但是,在最后一个 select 语句中使用它会出现错误。
DECLARE @v1 NVARCHAR(4000)
set @v1 = N'{"FirstName":"John","LastName":"Doe"}'
SELECT JSON_VALUE(@v1,'$.FirstName') as 'FirstName'
也可以正常工作。
您正在 CONCAT
语句中添加 N
字符。
尝试更改行:
set @v = CONCAT('N''',(SELECT value FROM OPENJSON(@json1, '$.name')),'''')
至:
set @v = CONCAT('''',(SELECT value FROM OPENJSON(@json1, '$.name')),'''')
JSON_VALUE函数可能先在所有行上执行再应用where 子句。这将取决于执行计划,因此拥有顶级子句或排序之类的小事情可能会对此产生影响。
- 意思是如果你的json数据在那一列(整个table)的任何地方都是无效的,执行查询的时候会报错。
- 因此,首先要找到并修复那些无效的 json 格式(' 而不是 " 等),然后 运行 您的查询。
我是 SQL 中 JSON 的新手。执行以下 -
时出现错误 "JSON text is not properly formatted. Unexpected character 'N' is found at position 0."DECLARE @json1 NVARCHAR(4000)
set @json1 = N'{"name":[{"FirstName":"John","LastName":"Doe"}], "age":31, "city":"New York"}'
DECLARE @v NVARCHAR(4000)
set @v = CONCAT('N''',(SELECT value FROM OPENJSON(@json1, '$.name')),'''')
--select @v as 'v'
SELECT JSON_VALUE(@v,'$.FirstName')
“select @v as 'v'”给了我
N'{"FirstName":"John","LastName":"Doe"}'
但是,在最后一个 select 语句中使用它会出现错误。
DECLARE @v1 NVARCHAR(4000)
set @v1 = N'{"FirstName":"John","LastName":"Doe"}'
SELECT JSON_VALUE(@v1,'$.FirstName') as 'FirstName'
也可以正常工作。
您正在 CONCAT
语句中添加 N
字符。
尝试更改行:
set @v = CONCAT('N''',(SELECT value FROM OPENJSON(@json1, '$.name')),'''')
至:
set @v = CONCAT('''',(SELECT value FROM OPENJSON(@json1, '$.name')),'''')
JSON_VALUE函数可能先在所有行上执行再应用where 子句。这将取决于执行计划,因此拥有顶级子句或排序之类的小事情可能会对此产生影响。
- 意思是如果你的json数据在那一列(整个table)的任何地方都是无效的,执行查询的时候会报错。
- 因此,首先要找到并修复那些无效的 json 格式(' 而不是 " 等),然后 运行 您的查询。