SQLserver如何提取嵌套json的字段

SQLserver如何提取这种json, 嵌套json的字段,而且里面有同名的情况

img

例如:需要获取planTableList 中的第二个name,如果获取

如果json里的字段需要用于筛选,那你设计表结构的时候就应该单独把它拎出来
不要总企图用sql来干高级语言的事
即使最终能实现,那查询速度也是令人发指的
你没法单独给json里的一个属性加索引

那你就只能先找到planTableList 然后获取后边的name,从第二个开始截取,如果里边只有两个name 那就可以使用RIGHT函数去获取,但是总体来说从麻烦的json中获取指定字段使用sql还是比较麻烦,而且容易出错,可以借助其他后端语言,解析成json对象,再获取属性值

引用ChatGPT部分参考:
可以使用SQL Server自带的OPENJSON函数来解析json数据,具体步骤如下所示:
1、首先使用SELECT语句的OPENJSON函数将json数据解析为表格的形式。
例如,以下代码使用OPENJSON函数将json数据解析为名为jsonTable的表格:

DECLARE @json NVARCHAR(MAX) = '
{
   "name":"123",
   ... 你截图里面的json内容
}
'

SELECT *
FROM OPENJSON(@json) WITH ([planTableList] NVARCHAR(MAX) AS JSON);

在使用WITH子句指定json结构时,使用AS JSON可以方便地将子对象解析为JSON格式的字符串,方便后续处理。
2、使用CROSS APPLY语句将嵌套的json对象解析为表格。
例如,以下代码使用CROSS APPLY函数将planTableList字段中的嵌套的json对象解析为名为planTableListTable的表格:

DECLARE @json NVARCHAR(MAX) = '
{
   "name":"123",
   ... 你截图里面的json内容
         },
         {
            "name":"testName"  --需要获取的字段
         }
      ]
   }
}
'
SELECT [name]
FROM OPENJSON(@json) WITH (
  [evaluation] NVARCHAR(MAX) AS JSON
) CROSS APPLY OPENJSON([evaluation].[planTableList]) WITH (
  [name] NVARCHAR(50) '$.name'
);

在使用OPENJSON函数解析时,可以根据具体的json结构使用$或子属性名来获取对应的嵌套字段。由于json中可能存在同名的对象,因此需要使用SQL Server中的别名来进行区分,同时也可以使用JSON_QUERY函数来获取json对象。
在以上示例中,我们使用的是WITH子句来指定列的别名,从而获得planTableList字段中的第二个json对象中的name字段。