Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SQL Server的FOR JSON函数用于数字和JSON输入_Sql_Json_Sql Server - Fatal编程技术网

将SQL Server的FOR JSON函数用于数字和JSON输入

将SQL Server的FOR JSON函数用于数字和JSON输入,sql,json,sql-server,Sql,Json,Sql Server,我正在努力使用SQL Server的FOR JSON函数将SQL Server中包含数字数据和JSON格式字符串的单个表的内容合并到一个整合的JSON输出中 我主要遇到了转义字符的问题,将JSON和非JSON数据组合到JSON格式的SQL Server查询输出中似乎不是一种简单的方法。有人能给我举一个成功查询的例子吗 样本数据: CREATE TABLE settings ( Id INT PRIMARY KEY NOT NULL, FileName nvarchar(max)

我正在努力使用SQL Server的FOR JSON函数将SQL Server中包含数字数据和JSON格式字符串的单个表的内容合并到一个整合的JSON输出中

我主要遇到了转义字符的问题,将JSON和非JSON数据组合到JSON格式的SQL Server查询输出中似乎不是一种简单的方法。有人能给我举一个成功查询的例子吗

样本数据:

CREATE TABLE settings (
    Id INT PRIMARY KEY NOT NULL,
    FileName nvarchar(max) NOT NULL,
    FilePath nvarchar(max) NOT NULL,
    Date datetime NOT NULL,
    Json nvarchar(max)
    );


INSERT INTO settings 
    (
    Id,
    FileName,
    FilePath,
    Date,
    Json
    )
VALUES
    (
    1,
    'contents.json',
    'folder1/folder2/contents.json',
    '2000-01-01T00:00:00.000',
    '{
                "A": 10,
                "B": 20,
                "C": {
                    "setting1": 30,
                    "setting2": 40,
                    "setting3": 50
                },
                "D": {
                    "setting1": 30,
                    "setting2": 40,
                    "setting3": 50
                },
                "E": true,
                "F": false
                "G": "John Doe"
            }'
    );
示例查询:

SELECT
    FileName
    , FilePath
    , Id
    , Date
    , Json
FROM settings
FOR JSON AUTO;
预期产出:

    [
        {
            "FileName": "contents.json",
            "FilePath": "folder1/folder2/contents.json",
            "Id": 1,
            "Date": "2000-01-01T00:00:00.000",
            "Json": [
                {
                    "A": 10,
                    "B": 20,
                    "C": {
                        "setting1": 30,
                        "setting2": 40,
                        "setting3": 50
                    },
                    "D": {
                        "setting1": 30,
                        "setting2": 40,
                        "setting3": 50
                    },
                    "E": true,
                    "F": false
                    "G": "John Doe"
                }
            ]
        }
    ]

您的示例设置.Json无效:

                "F": false
应该是:

                "F": false,
解决该问题后,您可以将查询更改为嵌套Json的Json,如下所示:

选择 文件名 ,文件路径 身份证件 日期 ,[Json]=Json_Queryconcat'[',Json'] 从设置 对于JSON AUTO; 结果如下:

[
    {
        "FileName": "contents.json",
        "FilePath": "folder1\/folder2\/contents.json",
        "Id": 1,
        "Date": "2000-01-01T00:00:00",
        "Json": [
            {
                "A": 10,
                "B": 20,
                "C": {
                    "setting1": 30,
                    "setting2": 40,
                    "setting3": 50
                },
                "D": {
                    "setting1": 30,
                    "setting2": 40,
                    "setting3": 50
                },
                "E": true,
                "F": false,
                "G": "John Doe"
            }
        ]
    }
]

请注意,SQL Server使用\/。

在文件路径中转义了/个字符。请查看本文,如果转义字符有效,请删除JSon字符串中的转义字符。我相信在您的情况下,您需要检查json是否有效,然后才能自动应用json。还有一条类似的线索……谢谢@AlwaysLearning,我赶紧整理了我的示例数据。很抱歉。JSON_查询包装器是这一个上缺少的秘密酱汁。谢谢你的快速回复。