将具有 JSON 字段的选择结果转换为 JSON 并将该数据与 JSON_VALUE() 一起使用

问题描述

我有一个包含一些列的表格。 这些列之一以 JSON 格式存储数据。 我使用 FOR JSON AUTO 从该表中选择一行。 我的问题是 SQL Server 在 JSON 属性的值周围加上引号,但我不想要这个;因为我想将内部 JSON 的值与 JSON_VALUE() 一起使用。我能做什么?

代码:

SELECT TOP 1 *
FROM users;

结果:

name    lastName    age    favorites
John    Duo         20     {"city": "paris","color": "blue","sport": "football"}

代码:

SELECT TOP 1 *
FROM users
FOR JSON AUTO,WITHOUT_ARRAY_WRAPPER;

结果:

{"name":"John","lastName":"Duo","age":20,"favorites":"{\"city\": \"paris\",\"color\": \"blue\",\"sport\": \"football\"}"}

代码:

SELECT JSON_VALUE(@user_json,'$.favorites.color')

结果:

NULL

我可以使用这个技巧从内部 JSON 中获取值,但它并不干净。

代码:

SELECT JSON_VALUE(JSON_VALUE(@user_json,'$.favorites'),'$.color')

结果:

blue

我怎样才能干净利落地做到这一点?

一些用于在 SQL Server 中进行测试的代码:

DROP TABLE IF EXISTS #test_tbl;
DECLARE @user_json AS NVARCHAR(MAX);
  
SELECT 'John' AS Name,'Duo' AS LastName,20 AS Age,'{"city": "paris","sport": "football"}' AS favorites
INTO #test_tbl;

SET @user_json =
(
    SELECT *
    FROM #test_tbl
    FOR JSON AUTO,WITHOUT_ARRAY_WRAPPER
)

SELECT JSON_VALUE(@user_json,'$.favorites.color');

SELECT JSON_VALUE(JSON_VALUE(@user_json,'$.color');

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)