SQL генерирует JSON без квадратных скобок - PullRequest
0 голосов
/ 31 октября 2019

У меня есть этот запрос:

SELECT 
    'Ball' AS title, 'Blue' AS color, 
    (SELECT '1' AS Opt1, '2' AS Opt2 
     FOR JSON PATH) AS 'Options'
FOR JSON PATH, ROOT('product')

И я получаю этот JSON, который довольно хорош, но у меня не может быть скобок после product (помечено)

{"product": 
[  <======
{
 "title": "Ball",
 "color": "Blue",
 "Options": [{"Opt1": "1","Opt2": "2"}]
}
]  <======
}

InДругими словами, мне нужно это:

{"product": 
{
 "title": "Ball",
 "color": "Blue",
 "Options": [{"Opt1": "1","Opt2": "2"}]
}
}

Я не могу использовать опцию WITHOUT_ARRAY_WRAPPER, потому что я уже использую опцию ROOT. Что я должен сделать, чтобы убрать эти квадратные скобки?

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Очень близко к ответу Грега Лоу, но обертывание внутреннего выбора с помощью json_query, чтобы избежать автоматического выхода (что происходит, потому что используется опция without_array_wrapper):

SELECT JSON_QUERY((
    SELECT 'Ball' AS title, 
           'Blue' AS color, (
                select '1' AS Opt1, 
                       '2' AS Opt2 
                FOR JSON PATH
           ) as Options
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
    )) AS Product
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

Это дает вам желаемоерезультат -

{
  "Product": {
    "title": "Ball",
    "color": "Blue",
    "Options": [
      {
        "Opt1": "1",
        "Opt2": "2"
      }
    ]
  }
}
0 голосов
/ 31 октября 2019

Это то, что вы ищете?

SELECT (SELECT 'Ball' AS title, 
               'Blue' AS color, 
               (select '1' AS Opt1, '2' AS Opt2 FOR JSON PATH) as 'Options'
        FOR JSON PATH, WITHOUT_ARRAY_WRAPPER) AS Product
        FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
...