如何修复SQL Server Json文本格式不正确在位置151处发现意外字符

问题描述

我正在处理具有JSON格式的列的表,我想从该列中提取坐标值。

所以我运行以下代码

Select *,JSON_VALUE(field,'$."Coordinate-X"[0]') As coordinate INTO TABLE_1 FROM table
WHERE JSON_VALUE(field,'$."Coordinate-X"[0]') IS NOT NULL

运行5分钟后出现以下错误

信息13609,第16级,状态1,第27行 Json文本格式不正确。在位置151处发现意外字符'“'。

当我尝试检查前200 *以下代码的某些行时,返回的结果将带有任何错误

Select TOP 200 *,JSON_QUERY(field,'$."Coordinate-X"[0]') As coordinate FROM table
WHERE JSON_VALUE(field,'$."Coordinate-X"[0]') IS NOT NULL

我想我有一行引起了错误,但是我不知道如何识别它或排除该行并返回结果。

解决方法

如果有人遇到相同的问题,我设法用where语句解决了这个问题,希望对您有所帮助!

Select *,JSON_QUERY(field,'$."Coordinate-X"[0]') As coordinate FROM table
WHERE field like '%Coordinate-X%'
and ISJSON(field)=1
,

似乎您的JSON字段中的数据不正确(在情况下为双引号)。 您的TOP 200成功运行,因为该错误字符未显示在TOP 200上。 我建议如果您对该列没有检查约束,请添加一个约束以避免错误

ALTER TABLE tablename ADD CONSTRAINT JSON_CHECK CHECK (ISJSON(field) = 1 ) 
JSON数据中的

个字符: 。,要在您的JSON中添加双引号作为值的一部分,它应类似于:"JSON Value with \" in the value"

例如[{"Id":3,"Title":"JSON Value with \" in the value"}]