是否可以获取存储在 SQL 列中的 json 字符串的所有路径

Is it possible to get all the paths of json strings stored in an SQL column

假设我有一个 JSON 数据存储在数据库的 varchar(max) 列中。是否可以使用 SQL 获取该数据中存在的所有 JSON 路径。例如对于以下 JSON:

{
    "dog":
    { 
        "name":"Rover",
        "age": 6,
        "likes:["catch", "eating"]
    }
}

我会得到以下输出:

$.
$.dog
$.dog.name
$.dog.age
$.dog.likes[0]
$.dog.likes[1]

我查看了 json_queryjson_value 等函数,但它们似乎更多地是关于从 JSON 获取数据,而不是我需要的元数据。

我正在使用 SQL Server 2018。

尝试递归 CTE

DECLARE @s varchar(max) = '{
    "dog":
    { 
        "name":"Rover",
        "age": 6,
        "likes":["catch", "eating"]
    }
}';

with cte as (
  select  [type],  '$' + case when roottype = 4 then '['+[key]+']' else '.'+[key] end  as path
  from (
     select r.[type] , dummy.[type] roottype, r.[key]
     from  OPENJSON('{"dummy":' + @s +'}', '$') dummy
     cross apply OPENJSON(@s, '$') r
     ) t
   
   union all 
   
   select j.[type],  path + case when cte.[type] = 4 then '['+j.[key]+']' else '.'+j.[key] end 
   from cte 
   cross apply OPENJSON(@s, path) j
   where cte.[type] >= 4 
 )
 select * 
 from cte;

Returns

type    path
5   $.dog
1   $.dog.name
2   $.dog.age
4   $.dog.likes
1   $.dog.likes[0]
1   $.dog.likes[1]