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

how to fix SQL server Json text is not properly formatted. Unexpected character is found at position 151

我正在处理一个 table,它有一个 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

我在 运行ning

5 分钟后收到以下错误

Msg 13609, Level 16, State 1, Line 27 Json text is not properly formatted. Unexpected character '"' is found at position 151.

当我尝试检查前 200 行 * 下面的代码 returns 结果没有任何错误时

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

我想我有一行导致错误,但我不知道如何识别它或排除该行以及 return 结果。

您的 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"}]

I managed to run around the problem with this where statement in case someone has same problem I hope it helps!

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