T-SQL JSON:将对象与字符串比较后,JSON_QUERY返回JSON字符串

问题描述

仅当JSON包含特定字段/属性时,我才尝试返回JSON_QUERY字段,但是当我将其与字符串(即字段名称)进行比较时,该函数不会返回JSON ...

单个代码没有比较

SELECT Field1,Field2,JSON_QUERY('[' + json.CrossApplyQuery + ']','$') AS [Returns_JSON]

返回:

Field1   |  Field2  |  Returns_JSON
Value1   |  Value2  |  [{"SomeQueryField":"SomeStringValue"]}]

使用JSON进行比较的代码

SELECT Field1,CASE WHEN CHARINDEX('_JsonProperty',UPPER(json.CrossApplyQuery)) > 0 THEN JSON_QUERY('[' + json.CrossApplyQuery + ']','$') ELSE NULL END AS [Returns_String],CASE WHEN Exists(Select * FROM OPEnjsON(JSON_QUERY('[' + json.CrossApplyQuery + ']','$'),'$') WHERE value like '%_JsonProperty%') THEN JSON_QUERY('[' + json.CrossApplyQuery + ']','$') ELSE NULL END AS [Returns_String_Too]

返回:

Field1   |  Field2  |  Returns_String                               |  Returns_String_Too
Value1   |  Value2  |  "[{\"SomeQueryField\":\"SomeStringValue\"}]  |  "[{\"SomeQueryField\":\"SomeStringValue\"}]

如果我不使用JSON字段进行比较(任何其他条件),则可以使用!

SELECT Field1,CASE WHEN 0 < 1 THEN JSON_QUERY('[' + json.CrossApplyQuery + ']','$') ELSE NULL END AS [Returns_JSON]

返回:

Field1   |  Field2  |  Returns_JSON
Value1   |  Value2  |  [{"SomeQueryField":"SomeStringValue"]}]

问题:如何检查JSON是否包含字段/属性而不将其更改为字符串?

解决方法

问题通过以下方式解决:

JSON_QUERY('[' + CASE WHEN CHARINDEX('_JsonProperty',UPPER(json.CrossApplyQuery)) > 0 THEN json.CrossApplyQuery ELSE NULL END + ']','$') [Returns_JSON]

不知道为什么,但是它起作用了... 谢谢!