如果对象名称包含单引号,如何选择JSON_VALUE?

时间:2018-11-08 00:02:06

标签: json sql-server sql-server-2016-express

我正在尝试从表中的某些JSON获取值。这是我的查询:

BadData = len(df[(df.A1.str.contains('A|T|C|G')==False) & (df.A1.str.contains('0|1|2|3')==TRUE)])

尝试获取“人的ID”的值。这是JSON_Data列中存储的JSON(的一部分):

=if(ArrayFormula(isnumber(K23:M23)),AVERAGEIF(K23:M23,"<>0"),"")

我尝试使用两个单引号,但这仍然会出现错误:

  

JSON路径格式不正确。意外字符'''在位置8找到。“

使用反斜杠转义单引号也不起作用。

1 个答案:

答案 0 :(得分:4)

这可能是一个很好的课程,不要制作垃圾JSON(并在将其插入数据库之前对其进行验证),因为according to the standard在实体名称中单引号不是可接受的字符。 :-)

您可以尝试这种类型的替换,但是性能将非常低落,它将替换Person's_ID所有实例,而不仅仅是替换为对象:< / p>

SELECT JSON_VALUE(REPLACE(JSON_Data,'Person''s_ID','Person_s_ID'), '$.Person_s_ID')
  FROM dbo.Table;

工作示例:

DECLARE @d varchar(255) = '{"Person''s_ID": "Test"}';
SELECT JSON_VALUE(REPLACE(@d,'Person''s','Person_s'), '$.Person_s_ID');

结果:

Test