首页 > 解决方案 > 通过单个函数提取对象和标量值

问题描述

我必须在 SQL 中编写一个查询来提取 JSON 路径的值。现在的问题是路径的最终值可以是 JSON 对象或标量值。但在 SQL Server 中,要获取对象和标量值JSON_QUERYJSON_VALUE应分别使用函数。我的问题是我想编写返回两种类型值的相同查询。有什么方法可以实现吗?

标签: sqljsonsql-server

解决方案


您可以使用OPENJSON函数来获取给定路径的值,$.foo.bar如下所示:

CREATE TABLE t(
    id INT IDENTITY NOT NULL PRIMARY KEY,
    json VARCHAR(MAX)
);

INSERT INTO t(json) VALUES
('{ "foo": { "bar": 123 } }'),
('{ "foo": { "bar": "x" } }'),
('{ "foo": { "bar": [1] } }'),
('{ "foo": { "bar": { "baz": 1 } } }');

SELECT *
FROM t
CROSS APPLY OPENJSON(json, '$.foo')
WHERE [key] = 'bar';

结果将包含以下重要列:

  • key:$.foo可以在 WHERE 子句中使用的键名
  • value: 数据类型 = NVARCHAR(MAX) 的键的值
  • type:具有 datatype = INT 的值的类型(参见文档)

db<>fiddle 上的演示


推荐阅读