首页 > 解决方案 > T-SQL - JSON 嵌套对象 - 1 行与多行

问题描述

这是表定义:

key_en, text_en, html_text_en, key_fr, text_fr, html_text_fr

这是我的查询:

SELECT  
    [key_en] AS 'en.key'
    ,[text_en] AS 'en.text'
    ,[html_text_en] AS 'en.htmltext'
    ,[key_fr] AS 'fr.key'
    ,[text_fr] AS 'fr.text'
    ,[html_text_fr] AS 'fr.htmltext'
FROM [MyContent]
FOR JSON PATH;

我得到的 JSON 结果是正确的。

[
    {
        "en": {
            "key": "key en",
            "text": "text en",
            "htmltext": "html en"
        },
        "fr": {
            "key": "key fr",
            "text": "text fr",
            "htmltext": "html fr"
        }
    },
    {
        "en": {
            "key": "key2 en",
            "text": "text2 en",
            "htmltext": "html2 en"
        },
        "fr": {
            "key": "key2 fr",
            "text": "text2 fr",
            "htmltext": "html2 fr"
        }
    }
]

然而,结果集在单行中(非常长的字符串)。

我想将结果集分布在与表中的数据一样多的行中。预期的结果应该是:

    ROW 1 
    {
        "en": {
            "key": "key en",
            "text": "text en",
            "htmltext": "html en"
        },
        "fr": {
            "key": "key fr",
            "text": "text fr",
            "htmltext": "html fr"
        }
    }

    ROW 2 
    {
        "en": {
            "key": "key2 en",
            "text": "text2 en",
            "htmltext": "html2 en"
        },
        "fr": {
            "key": "key2 fr",
            "text": "text2 fr",
            "htmltext": "html2 fr"
        }
    }

为了实现我的目标,我必须带来哪些改变?

标签: sqljsonsql-servertsql

解决方案


You can use this modified query which will return a row of JSON per row of your table:

SELECT  (
        SELECT  [key_en] AS 'en.key',
                [text_en] AS 'en.text',
                [html_text_en] AS 'en.htmltext',
                [key_fr] AS 'fr.key',
                [text_fr] AS 'fr.text',
                [html_text_fr] AS 'fr.htmltext'
          FOR JSON PATH
        )
  FROM  [MyContent]

推荐阅读