使用ms sql服务器的嵌套JSON

问题描述

我有一个带有 USER_DATA 的表(用户数据表),其中有2行(基本上是2个条目)

我创建了一个嵌套的JSON查询->

SELECT CONCAT( first_name,' ',last_name) AS displayName,first_name AS givenName,last_name AS surname,identities = (SELECT login_name AS issuerAssignedId 
                       FROM user_data 
                        FOR JSON AUTO) 
 FROM user_data
  FOR JSON PATH,ROOT('users');

在这里,我得到这个输出->

{
  "users": [
    {
      "displayName": "David Dave","givenName": "David","surname": "Dave","identities": [
        {
          "issuerAssignedId": "System"
        },{
          "issuerAssignedId": "Administrators"
        }       
      ]
    },{
      "displayName": "Tony Padila","givenName": "Tony","surname": "Padila",{
          "issuerAssignedId": "Administrators"
        }
      ]
    }

但是问题是->内部身份,

“ issuerAssignedId”:“系统” ---->属于戴夫

“ issuerAssignedId”:“管理员” ---->属于Tony

但是我无法停止内部选择查询(无法正确映射)

正确的输出应为--->

{
      "users": [
        {
          "displayName": "David Dave","identities": [
            {
              "issuerAssignedId": "System"
            }      
          ]
        },{
          "displayName": "Tony Padila","identities": [
            {
              "issuerAssignedId": "Administrators"
            }
          ]
        }

请帮助。

解决方法

您缺少内部查询中的条件,以及为什么要让标识成为JSON输出中的单独数组。

根据我的理解,我已经更新了查询,请在下面的sql中进行引用,我不确定为什么您在查询中使用**

     SELECT CONCAT (
        FIRST_NAME,' ',LAST_NAME
        ) AS displayName,FIRST_NAME AS givenName,LAST_NAME AS surname,identities = (
        SELECT innr.LOGIN_NAME AS issuerAssignedId
        FROM USER_DATA
        innr
        WHERE
        innr.LOGIN_NAME = ottr.LOGIN_NAME
        FOR JSON AUTO
        )
   FROM USER_DATA ottr
   FOR JSON PATH,ROOT('users');

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...