问题描述
我正在处理具有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"}]