将具有 JSON 字段的 select 结果转换为 JSON 并将该数据与 JSON_VALUE() 一起使用
Convert select result that has JSON field to JSON and use that data with JSON_VALUE()
我有一个 table,其中有一些列。
其中一列以 JSON 格式存储数据。
我 select 从这个 table 和 FOR JSON AUTO
排了一行。
我的问题是 SQL 服务器在 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服务器中测试的一些代码:
DROP TABLE IF EXISTS #test_tbl;
DECLARE @user_json AS NVARCHAR(MAX);
SELECT 'John' AS Name, 'Duo' AS LastName, 20 AS Age, '{"city": "paris", "color": "blue", "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,'$.favorites'),'$.color');
您需要使用 json_query()
嵌套收藏夹 JSON,例如:
SET @user_json =
(
SELECT Name, LastName, Age, json_query(favorites) as favorites
FROM #test_tbl
FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER
)
SELECT JSON_VALUE(@user_json,'$.favorites.color');
# (No column name)
# ----------------
# blue
我有一个 table,其中有一些列。
其中一列以 JSON 格式存储数据。
我 select 从这个 table 和 FOR JSON AUTO
排了一行。
我的问题是 SQL 服务器在 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服务器中测试的一些代码:
DROP TABLE IF EXISTS #test_tbl;
DECLARE @user_json AS NVARCHAR(MAX);
SELECT 'John' AS Name, 'Duo' AS LastName, 20 AS Age, '{"city": "paris", "color": "blue", "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,'$.favorites'),'$.color');
您需要使用 json_query()
嵌套收藏夹 JSON,例如:
SET @user_json =
(
SELECT Name, LastName, Age, json_query(favorites) as favorites
FROM #test_tbl
FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER
)
SELECT JSON_VALUE(@user_json,'$.favorites.color');
# (No column name)
# ----------------
# blue