對於給定的選擇器jq
,我想知道是否選擇器成功或失敗給定其輸入。例如,正常以下指示錯誤狀態:如何確定jq選擇器是成功還是失敗,如果爲null或false可能是有效結果?
% jq -re .bad <<<'{}'
null
% echo $?
1
%
但是,不正確下列指示錯誤狀態(據我需要去):
% jq -re .key <<<'{"key":false}'
false
% echo $?
1
%
上述的問題是,如果最後一個輸出值爲false
或null
,-e選項將返回1狀態。但是,如果JSON輸入中存在false和null值,則此返回狀態會給出錯誤的印象,表明發生了某些故障。
我是否被迫在返回代碼1的情況下檢查密鑰是否存在?例如:
#!/bin/bash
Result=$(jq -re .key <<<'{"key":false}')
Status=$?
if [[ $Status -eq 1 ]] ; then
jq -re '. | has("key")' <<<'{"key":false}' && (exit 0) || (exit 1)
else
(exit $Status)
fi
# At this point $? can be relied on to indicate success/failure
將上述溶液將1返回狀態改變爲0,併爲簡單JQ選擇器上可接受的,但這種解決方案不是對可能產生的虛假或空有效結果計算選擇令人滿意。
那麼,有沒有辦法知道JQ選擇是否真正成功還是失敗(即使是計算選擇器),考慮的結果,如false
和null
可以是有效或無效取決於選擇和輸入
該解決方案應該在Bash 4.2或更高版本中完成。
不幸的是,選擇器是一個關鍵是不是我已經提出的問題。而且,我已經發布了一個不需要額外解析的解決方案。使用計算選擇器(非關鍵選擇器),過程並不簡單。我最終希望得到的是一個真正表明錯誤狀態的jq選項。我現在認爲,當前的解決方案/解決方案需要成爲一個組合,分別處理簡單的選擇器案例或計算選擇器。 –