我想从一个名为blablabla.json的JSON文件中提取信息,如下所示:
{ "token": { "issued_at": "2018-11-04T23:35:07Z", "expires_at": "2018-11-05T00:35:07Z", "user": { "id": "ide", "name": "ide" } } }
我想获取“ expires_at”日期以将其与当前日期进行比较。 为此,我使用以下代码:
type blablabla.json|jq .token".expires_at"
它可以工作,但是我不知道如何将其设置为变量。 我尝试类似的东西:
SET date=type blablabla.json|jq .token".expires_at"
但是它什么也没做。 你有主意吗?
非常感谢您。
答案 0 :(得分:0)
通常,您会使用For /F
循环:
@Echo Off
For /F "Delims=" %%A In ('type blablabla.json^|jq .token".expires_at"'
) Do Set "Expiry=%%~A"
可以使用变量%Expiry%
访问结果的位置。 (您不会将变量设置为现有的重要系统变量的名称)。
要根据当前日期检查它,您需要找到一种方法,因为两个日期都是字符串,而不是日期对象。 这超出了此问题的范围。
答案 1 :(得分:0)
出于以下几个原因,我将为此使用PowerShell(至少作为一种工具):
这一行PowerShell脚本返回的到期时间为今天,与今天(包括UTC的转换)相差一天。
<SLM:stylesheet>
<SLM:system>
<SLM:module name="Category-A">
<SLM:member state="stateless">a1</SLM:member>
<SLM:member state="stateless">a2</SLM:member>
<SLM:member state="stateless">a3</SLM:member>
<SLM:member state="stateless">a4</SLM:member>
<SLM:member state="stateless">a5</SLM:member>
<SLM:member state="stateless">a6</SLM:member>
</SLM:module>
</SLM:system>
并且可以轻松地分批包装。
(([datetime](Get-Content .\blablabla.json |ConvertFrom-Json).token.expires_at).Date - (Get-Date).date).Days
(今天)将返回:
@Echo off
For /f %%A in ('
powershell -NoP -C "(([datetime](Get-Content .\blablabla.json |ConvertFrom-Json).token.expires_at).Date - (Get-Date).date).Days"
') Do Set "Expires=%%A"
Set Expires
,过去日期为负值,未来日期为正值。
答案 2 :(得分:0)
是的,我知道出于多种原因,不应通过批处理文件处理.json文件 。但是,如果问题很简单(如此问题)并且没有其他约束,则批处理文件解决方案可能是最简单的解决方案,例如包含日期比较的两行代码。
for /F "tokens=2 delims=, " %%a in ('findstr "expires_at" blablabla.json') do set "expires=%%~a"
if %expires:~0,4%%expires:~5,2%%expires:~8,2% geq %date:~6,4%%date:~0,2%%date:~3,2% goto expired
答案 3 :(得分:0)
使用Xidel就像这样简单:
xidel -s blablabla.json -e "$json//expires_at"
这将返回其值:2018-11-05T00:35:07Z
。
要将其导出为%expdate%
:
FOR /F "delims=" %%A IN ('xidel.exe -s blablabla.json -e "expdate:=$json//expires_at" --output-format=cmd') DO %%A
Xidel还可以以相同格式返回当前日期:
xidel -s blablabla.json -e "$json//expires_at,current-dateTime()"
这将返回:
2018-11-05T00:35:07Z
2019-01-07T18:26:33.453