jqで条件付き書式を使用する - PowerShell [閉じる]

jqで条件付き書式を使用する - PowerShell [閉じる]

これはあなたのフォローアップの質問です。この問題これは他の人が貢献したものです。 Webサーバーには次の出力があります。

{
    "status":"OK",
    "result":{
        "string1":{
            "variable":0
        },
        "string2":[
            {
                "id":"XXXXX:XXXXX",
                "tier":"normal",
                "latitude":"01.XXXXX",
                "longitude":"02.XXXXX"
            },
            {
                "id":"XXXXX:XXXXX",
                "tier":"normal",
                "latitude":"01.XXXXX",
                "longitude":"02.XXXXX"
            },
            {
                "id":"XXXXX:XXXXX",
                "tier":"special",
                "latitude":"01.XXXXX",
                "longitude":"02.XXXXX"
            },
            {
                "id":"XXXXX:XXXXX",
                "tier":"normal",
                "latitude":"01.XXXXX",
                "longitude":"02.XXXXX"
            }
        ]
    }
}

jq -r '.result.string2[].id' responses.json現在、IDを抽出してresponses.jsonファイルとして保存しています。

idしかし、私の質問では、jqがifのみを出力するように条件をどのように設定しますかtier: "special"?です。次の方法で解決しようとしました。回答このスレッドでは、次の2つのエイリアスがあります。

jq -r '.result.string2[] | select(.tier == "special") | .id'responses.json

jq -r '.result.string2[] | select(.tier == "special") | .id' responses.json

私のWindows-PowerShellでは動作しないようです。次のエラーメッセージが表示されます。

 jq: error: special/0 is not defined at <top-level>, line 1:
.result.string2[] | select(.tier == special) | .id jq: 1 compile error

答えてくれてありがとう!

ベストアンサー1

二重引用符をエスケープする必要があります。おそらくpowershellは、POSIXシェルのように一重引用符の中に二重引用符を保持しないからです。

jq -r '.result.string2[] | select(.tier == \"special\") | .id'

おすすめ記事