Как сгладить JSON с помощью Awk? - PullRequest
0 голосов
/ 16 октября 2019

Я хочу сгладить строку JSON так, как это делает jq, но у меня нет jq несоответствующего, где будет запускаться мой скрипт.

У меня есть такой ввод:

[
    {
        "State": {
            "Status": "running",
            "foo": "bar"
        }
    }
]

И хотите что-то подобное в качестве вывода:

State.Status: "running"
State.foo: "bar"

Я думаю, что это можно сделать с помощью awk, но не знаю с чего начать.

1 Ответ

1 голос
/ 17 октября 2019

Вот скрипт, который будет делать то, что вы хотите с введенным вами вводом, но YMMV с любым другим вводом:

$ cat tst.awk
match($0,/"[^"]+"/) {
    tag = substr($0,RSTART+1,RLENGTH-2)
    $0  = substr($0,RSTART+RLENGTH)
}
$1 == "}"  { name = ""; next }
$NF == "{" { name = tag; next }
$1 !~ /[][]/ {
    match($0,/"[^"]+"/)
    val = substr($0,RSTART,RLENGTH)
    print name "." tag ": " val
}

.

$ awk -f tst.awk file
State.Status: "running"
State.foo: "bar"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...