使用SQL解析JSON(OPENJSON)

PBe*_*ezy 1 sql json

您可以下载Google搜索,它们以多个JSON文件的形式出现.我正在尝试使用SQL函数OPENJSON将它们解析为[TimeStamp]和[Query Text]列

DECLARE @json as nvarchar(max)

SET @json = N'{"event":[{"query":{"id":[{"timestamp_usec":"1329003091748889"}],"query_text":"download google searches"}}]}'

SELECT * FROM OPENJSON(@json, N'$.event')
WITH (   
      [TimeStamp] nvarchar(max) N'$.query.timestamp_usec'   ,
      [QueryText]   nvarchar(max) N'$.query.query_text'   
)
Run Code Online (Sandbox Code Playgroud)

查询文本返回结果,但时间戳只读取NULL.我究竟做错了什么?

Suv*_*tha 7

您的代码中存在小故障.

示例Json

{
    "event": [{
        "query": {
            "id": [{
                "timestamp_usec": "1506676658"
            }],
            "query_text": "download google searches"
        }
    }]
}
Run Code Online (Sandbox Code Playgroud)

如果你拿样本json timestamp_usecid数组里面,那么为了从中获取数据你需要做一个小的修改来查询,如下图所示.

DECLARE @json as nvarchar(max)

SET @json = N'{"event":[{"query":{"id":[{"timestamp_usec":"1506676658"}],"query_text":"download google searches"}}]}'

SELECT * FROM OPENJSON(@json, N'$.event')
WITH (   
      [TimeStamp] nvarchar(max) N'$.query.id[0].timestamp_usec'   ,
      [QueryText]   nvarchar(max) N'$.query.query_text'   
)
Run Code Online (Sandbox Code Playgroud)