Создайте JSON с именем и значением столбца в виде пар ключ-значение - PullRequest
0 голосов
/ 08 октября 2019

Мы должны отформатировать экспорт данных в формате JSON с определенным форматом. Вот тестовый пример:

DECLARE @tmp TABLE (ID INT, value1 VARCHAR(30), value2 VARCHAR(30))
INSERT @tmp VALUES (1,'test1','test2')

Вывод должен быть:

{
    "ID": 1,
    "custom_attributes": [
        {
            "attribute_code": "value1",
            "value": "test1"
        },
        {
            "attribute_code": "value2",
            "value": "test2"
        }
    ]
}

Мы должны сделать две пары ключ-значение для некоторых столбцов. Первый описывает имя столбца, а второй - значение. И сверху упакуйте его в массив.

Интересно, возможно ли это с нативными функциями JSON t-sql, потому что мне нужен правильный JSON в качестве вывода (а не строка).

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вам нужно использовать вложенные FOR JSON:

DECLARE @tmp TABLE(ID INT, value1 VARCHAR(30), value2 VARCHAR(30));
INSERT @tmp VALUES (1, 'test1', 'test2');

SELECT ID, custom_attributes = (
    SELECT attribute_code, value
    FROM @tmp AS x
    -- column to rows
    CROSS APPLY (VALUES
        ('value1', value1),
        ('value2', value2)
    ) AS a(attribute_code, value)
    WHERE x.ID = t.ID
    FOR JSON PATH
)
FROM @tmp AS t
FOR JSON AUTO
0 голосов
/ 08 октября 2019

Я нашел возможный ответ, который работает, но кажется немного сложным ...

SELECT tmp.ID
,      (
        SELECT ca.attribute_code
        ,      ca.[value]
        FROM @tmp tmp2
        CROSS APPLY (
            VALUES 
                ('value1',value1),
                ('value2',value2)
        ) ca (attribute_code, [value])
        WHERE tmp2.ID = tmp.ID
        FOR JSON PATH
        ) [custom_attributes]
FROM @tmp tmp
FOR JSON PATH
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...