json - SQL Server OPENROWSET 不提取 JSON 数据

标签 json sql-server

我正在尝试将 JSON 文件数据“WhitelistedOrigins”保存在 SQL 表中,但我不断收到 NULL 条目。 我使用相同的方法将属性导入到表中,尽管 JSON 的格式不同,但之前这已经有效了

JSON

"Client": {
"whiteListedOrigins": [
      "file://",
      "https://mobile.gtent.eu",
      "https://mobile.assists.co.uk",
      "https://valueadds3.active.eu",
      "https://flash3.active.eu",
      "https://valueadds3.assists.co.uk"
    ]
}

SQL

DECLARE @JSON VARCHAR(MAX)
SELECT @JSON = BulkColumn
FROM OPENROWSET 
(BULK 'C:\config.json', SINGLE_CLOB) 
AS A

UPDATE dbo.CommonBaseline
SET CommonBaseline.whiteListedOrigins=  whiteListedOrigins
     FROM OPENJSON (@JSON, '$.Client')
        WITH ( 
            whiteListedOrigins Varchar (MAX))

结果

enter image description here

最佳答案

您需要使用OPENJSON()在列定义中具有显式架构和 AS JSON 选项。

If you want to return a nested JSON fragment from a JSON property, you have to provide the AS JSON flag. Without this option, if the property can't be found, OPENJSON returns a NULL value instead of the referenced JSON object or array, or it returns a run-time error in strict mode.

声明:

DECLARE @Json nvarchar(max) = N'{
"Client": {
"whiteListedOrigins": [
      "file://",
      "https://mobile.gtent.eu",
      "https://mobile.assists.co.uk",
      "https://valueadds3.active.eu",
      "https://flash3.active.eu",
      "https://valueadds3.assists.co.uk"
    ]
}
}'

SELECT *
FROM OPENJSON (@JSON, '$.Client') WITH ( 
   whiteListedOrigins nvarchar (MAX) AS JSON
)

输出:

--------------------
whiteListedOrigins
--------------------
[
      "file://",
      "https://mobile.gtent.eu",
      "https://mobile.assists.co.uk",
      "https://valueadds3.active.eu",
      "https://flash3.active.eu",
      "https://valueadds3.assists.co.uk"
    ]

注释:

您的 JSON(不含 {})无效。

关于json - SQL Server OPENROWSET 不提取 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57307578/

相关文章:

asp.net-mvc - 如何在 MVC 3 中显示 JSON 图像?

mysql - SSMS "SELECT * INTO"从 MSSQL 表到链接的 MySQL 服务器

sql-server - SQL : Adding getdate() as an extended property with EXEC sys.sp_updateextendedproperty

asp.net - 缓存来自 sql 数据库的结果,还是每次查询?

c# - 向多个用户显示由另一个用户插入的数据更新

patternProperties 的 Json 模式示例

android - 使用 Json api 的 Activity 之间的过去信息

c# - LINQ 查询连接两个表并从表 B 中选择表 A 对应的最新记录

java - neo4j Rest api发送多个查询和参数

python - GIS:在 Python 中合并多重多边形