【问题标题】:Opening ndJSON format in SQL Server 2016在 SQL Server 2016 中打开 ndJSON 格式
【发布时间】:2018-05-14 21:36:02
【问题描述】:

如何在 SQL Server 2016 中打开 ndJSON 格式?我可以使用 JSON 格式打开,但不知道如何使用 ndJSON。

SQL Server 中是否有特定的函数可以执行此操作,或者是否有其他方法?

Declare @JSON varchar(max)

SELECT @JSON = BulkColumn
FROM OPENROWSET (BULK 'C:\examplepath\filename.JSON', SINGLE_CLOB) as j


Select * FROM OPENJSON(@JSON)
With (House varchar(50), 
      Car varchar(4000) '$.Attributes.Car',
      Door varchar(4000) '$.Attributes.Door',
      Bathroom varchar(4000) '$.Attributes.Bathroom' ,
      Basement varchar(4000) '$.Attributes.Basement' ,
      Attic varchar(4000) '$.Attributes.Attic'
      ) as Dataset
Go

JSON 格式:

[

{"House":"Blue","Attributes":{"Car":"Camry","Door":"Small","Bathroom":"Medium","Basement":"Dark","Attic":"1"}},
{"House":"Red","Attributes":{"Car":"Thunderbird","Door":"Large","Bathroom":"Small","Basement":"Light","Attic":"4"}}

]

ndJSON 格式:

{"House":"Blue","Attributes":{"Car":"Camry","Door":"Small","Bathroom":"Medium","Basement":"Dark","Attic":"1"}}
{"House":"Red","Attributes":{"Car":"Thunderbird","Door":"Large","Bathroom":"Small","Basement":"Light","Attic":"4"}}

【问题讨论】:

  • 没有ndjson 格式。这是一个域名抢注者的名字,他试图获取这个名字并从本质上复制了 JSON 标准中的所有内容。
  • 查看维基百科在JSON Streaming 上的条目以了解这些记录是什么以及为什么使用它们。简而言之,它不是一个 JSON 字符串。它是在流中发送/存储的多个单独的 JSON 记录

标签: sql json sql-server sql-server-2016 ndjson


【解决方案1】:

你可以使用FORMATFILE子句:

SELECT  House, Car, Door, Bathroom, Basement, Attic   
FROM OPENROWSET (BULK 'D:\ndjson\ndjson.json', FORMATFILE= 'D:\ndjson\csv.fmt' ) as j
  CROSS APPLY OPENJSON(json) With 
  (   House    varchar(50), 
      Car      varchar(4000) '$.Attributes.Car',
      Door     varchar(4000) '$.Attributes.Door',
      Bathroom varchar(4000) '$.Attributes.Bathroom' ,
      Basement varchar(4000) '$.Attributes.Basement' ,
      Attic    varchar(4000) '$.Attributes.Attic'
  ) as Dataset

文件 csv.fmt 包含的位置:

13.0
1
1 SQLCHAR 0 0 "\r\n" 1 json ""

结果:

有关this MSDN 博客的更多信息

【讨论】:

  • 不幸的是@Andrea,我收到此错误:JSON 路径格式不正确。在位置 1 发现意外字符“A”。
  • 哦,哇,没关系。我的问题是一个错字,我有 '$Attributes.Attic',而不是应该是 '$.Attributes.Attic' ,它缺少美元符号后的句点。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多