0

次の形式の json ファイルがあります。errorCode が 1 の場合に ID に対してアクションを実行する bash スクリプトを作成したいと考えています。

errorCode が 1 の場合、id に対して操作を実行します。それ以外の場合は何もしません。

[{
    "endTime": null, 
    "errorCode": 1, 
    "id": 219759099, 
}, 

{
    "endTime": null, 
    "errorCode": 0, 
    "id": 219759100, 
}, 

{
   "endTime": null, 
    "errorCode": 0, 
    "id": 219759101, 
}]
4

4 に答える 4

0

awk の使用:

awk -F '[ ":,]+' '$2=="errorCode" && $3==1{err=1} err && $2=="id"{print $3; err=0}' f.json

出力:

219759099

ただし、シェルを使用して JSON を解析することは、JSON を解析する最良の方法ではなく、JSON ファイルの形式が変更された場合にもエラーが発生しやすくなる可能性があることに注意する必要があります。

于 2013-07-29T11:57:57.210 に答える
0

これはトリックを行います:

parity=0
for val in $(grep -E "errorCode|id" x.json|grep -Eo [0-9]+)
do
    if [ $parity -eq 0 ]
    then
            if [ $val -eq 1 ]
            then
            parity=1
            fi
    else
            echo "id $val is erroneous"
            parity=0
    fi
done

ここで、x.json は jason ファイルです。echoコマンドを含む行を、必要に応じて適切なステートメントに置き換えます。たとえば、ID をエラー ログに追加する場合は、次のことを試してください。

echo $val >> erroneousIDs.log

NB : フィールドの順序は常に同じであると想定しました。

于 2013-07-29T11:24:03.313 に答える