5

我正在处理一个包含 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

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

4

2 回答 2

5

我设法用这个 where 语句解决了这个问题,以防有人遇到同样的问题,我希望它有所帮助!

Select *,JSON_QUERY(field,'$."Coordinate-X"[0]') As coordinate FROM table
WHERE field like '%Coordinate-X%'
and ISJSON(field)=1
于 2020-11-01T14:56:25.643 回答
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"}]

于 2020-10-27T19:58:31.140 回答