簡體   English   中英

使用jq從JSON文件中提取信息,並將信息設置在變量中

[英]Extract an information from a JSON file with jq and set the information in a variable

我想從一個名為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"

但它什么也沒做。 你有想法嗎?

非常感謝你。

通常,您將使用For /F循環:

@Echo Off
For /F "Delims=" %%A In ('type blablabla.json^|jq .token".expires_at"'
) Do Set "Expiry=%%~A"

可以使用變量%Expiry%訪問結果的位置。 (您不會將變量設置為現有的重要系統變量的名稱)

至於對照當前日期進行檢查,您需要找到一種方法來執行此操作,因為兩個日期都是字符串,而不是日期對象。 那超出了這個問題的范圍

由於以下幾個原因,我將為此使用PowerShell(至少作為一種工具):

  1. 它直接支持json
  2. 它具有[datetime]類型進行計算

這一行PowerShell腳本返回的expedes.at與今天(包括UTC的轉換)相差一天。

(([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

這將(今天)返回:

Expires=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

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM