簡體   English   中英

在jq中返回鍵/值對

[英]Return key/value pairs in jq

我有以下json輸出(由ansible生成)和一個看似簡單的任務,它通過jq提取了一些鍵/值對。 但是,我似乎無法獲得所需的輸出。

{
"custom_stats": {}, 
"plays": [
    {
        "play": {
            "id": "001dd8b7-1cca-07c6-2280-00000000043a", 
            "name": "Ansible Ad-Hoc"
        }, 
        "tasks": [
            {
                "hosts": {
                    "hostname01-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname02-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname03-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname04-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname05-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname06-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname07-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname01-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname02-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname03-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname04-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname05-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname01-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname02-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname03-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname04-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname05-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname06-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }, 
                    "hostname07-con": {
                        "_ansible_no_log": false, 
                        "_ansible_verbose_always": true, 
                        "action": "debug", 
                        "changed": false, 
                        "hw_system_serial": "<SERIALNUMBER>"
                    }
                }, 
                "task": {
                    "id": "001dd8b7-1cca-07c6-2280-00000000043c", 
                    "name": "debug"
                }
            }
        ]
    }
], 
"stats": {
    "hostname01-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname02-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname03-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname04-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname05-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname06-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname07-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname01-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname02-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname03-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname04-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname05-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname01-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname02-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname03-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname04-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname05-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname06-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }, 
    "hostname07-con": {
        "changed": 0, 
        "failures": 0, 
        "ok": 1, 
        "skipped": 0, 
        "unreachable": 0
    }
}

}

基本上,我只想將最里面的對象的鍵以及它的hw_system_serial值返回到同一行。 像這樣:

hostname01-con: <SERIAL_NUMBER_1>
hostname02-con: <SERIAL_NUMBER_2>
etc

我覺得這應該是微不足道的(這次我可能寫了一些ruby或python腳本...),但是嘗試一下可能無法正確理解。 我已經嘗試了各種各樣的方法,但是最后要么遍歷每個序列號的主機列表,要么返回兩個單獨的列表(一個主機和一個序列號)。

例如,這:

.plays[].tasks[].hosts | keys as $hosts | .[].hw_system_serial as $serial | $hosts | join(": ") + $serial

返回一行中每個主機名的列表,后跟一個序列號。

認為 ,如果我可以將$serial轉換$serial數組,則可以使用,但是我使用split()嘗試也失敗了(例如, $serial | split("\\r")返回單項數組而不是數組的列表)項)。

我在這里想念什么? 我覺得jq對此應該很輕松(再次,任何帶有JSON解析器的腳本語言...),但這是否不是正確的工具?

是的,這對於jq工具是可行的:

jq -r '.plays[].tasks[].hosts | to_entries[] | "\(.key +": "+ .value.hw_system_serial)"' input.json

輸出:

hostname01-con: <SERIALNUMBER>
hostname02-con: <SERIALNUMBER>
hostname03-con: <SERIALNUMBER>
hostname04-con: <SERIALNUMBER>
hostname05-con: <SERIALNUMBER>
hostname06-con: <SERIALNUMBER>
hostname07-con: <SERIALNUMBER>

暫無
暫無

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

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