SQL JSON_VALUE 查询但没有路径名?
Posted
技术标签:
【中文标题】SQL JSON_VALUE 查询但没有路径名?【英文标题】:SQL JSON_VALUE query but without path names? 【发布时间】:2021-01-10 22:14:11 【问题描述】:我有想要导入 SQL Server 数据库的 json 数据,但它没有要引用的路径名 - 我如何在此处识别不同的元素:
示例 json:https://api.cryptowat.ch/markets/binance/btcusdt/ohlc?periods=3600
这以以下格式输出,但没有名称:
[
CloseTime,
OpenPrice,
HighPrice,
LowPrice,
ClosePrice,
Volume,
QuoteVolume
]
[
1474736400,
8744,
8756.1,
8710,
8753.5,
91.58314308,
799449.488966417
],
关注这个:https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?view=sql-server-ver15
但不确定在此处输入什么:JSON_VALUE ( expression , path ) 作为路径位 - 任何帮助表示赞赏
谢谢!
【问题讨论】:
这不是有效的 JSON,您不能使用 JSON 操作来查询无效的内容。但是,您链接到的“示例”JSON 是有效的 JSON,而不是您的问题。 我的问题是与该样本相关的文档的副本; docs.cryptowat.ch/rest-api/markets/ohlc。如果它不是有效的 json 那么它是什么?您可能知道的任何简单方法或可以帮助我将其导入 SQL Server 数据库的功能? 它是一个数组,用逗号分隔。因此,如果您将其视为 CSV,则可以拆分数据。 我想创建一个处理该数据并不断导入的作业,因此需要在 SQL Server 中处理所有数据。正在使用这个:github.com/geral2/SQL-APIConsumer/blob/master/README.md 但它在我所见的范围内无法定义单个元素 我觉得你在这里说的是XY Problem。 【参考方案1】:这似乎是一堆代表行的数组。像这样的查询应该这样做:
declare @json nvarchar(max) = '
"result":"3600":[[1606705200,18482.31,18550,18435.81,18506.87,2470.427799,45664903.49372367],[1606708800,18506.87,18593.81, ...
'
select dateadd(second,cast(json_value([value],'$[0]') as bigint),'19700101') CloseTime,
cast(json_value([value],'$[1]') as float) OpenPrice,
cast(json_value([value],'$[2]') as float) HighPrice,
cast(json_value([value],'$[3]') as float) LowPrice,
cast(json_value([value],'$[4]') as float) ClosePrice,
cast(json_value([value],'$[5]') as float) Volume,
cast(json_value([value],'$[6]') as float) QuoteVolume
from openjson(@json,'$.result."3600"')
哪个输出
CloseTime OpenPrice HighPrice LowPrice ClosePrice Volume QuoteVolume
----------------------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- ----------------------
2020-11-30 03:00:00.000 18482.31 18550 18435.81 18506.87 2470.427799 45664903.4937237
2020-11-30 04:00:00.000 18506.87 18593.81 18431.26 18579.5 2283.371404 42288794.16279
2020-11-30 05:00:00.000 18579.67 18619.79 18450 18523.79 2119.718173 39247661.0930612
2020-11-30 06:00:00.000 18523.79 18627.29 18477.62 18520.47 1835.535407 34068066.5616724
2020-11-30 08:00:00.000 18520.27 18677 18512.9 18623 3499.555499 65178082.9264658
2020-11-30 09:00:00.000 18623.05 18625 18375.55 18462.31 4220.609403 77972731.2494644
2020-11-30 10:00:00.000 18462.7 18510 18326.03 18478.54 3054.085606 56248649.2319086
2020-11-30 11:00:00.000 18478.54 18589 18446.5 18503.06 2240.917883 41516090.5672204
2020-11-30 12:00:00.000 18503.11 18655 18503.11 18600.95 3413.482688 63562162.7584654
2020-11-30 13:00:00.000 18600.94 18840 18600.94 18837.16 4675.208754 87625034.6027069
2020-11-30 14:00:00.000 18835.97 19210 18788.11 19151.49 9286.987366 176378855.887698
2020-11-30 15:00:00.000 19151.49 19782.1 19135 19480.8 15792.38031 307214715.045745
【讨论】:
赞赏 - 会试一试! 是的,这非常有效,甚至为我修复了 unix 时间 - 谢谢!以上是关于SQL JSON_VALUE 查询但没有路径名?的主要内容,如果未能解决你的问题,请参考以下文章
在 PL/SQL 中出现错误“PLS-00201:必须声明标识符‘JSON_VALUE’”
C#Dapper使用JSON_VALUE进行SQL Server 2016