обновить поля с внутренними значениями - PullRequest
0 голосов
/ 24 марта 2020

У меня есть строка json, например:

    {
        "name" : "test",
        "properties": {
            "p2": {"test": "test", "value": "b"},
            "p1": {"value": "a"},
            "p3": {"value": "c"}
        }
    }

, и я хочу:

{
"p2" : "b",
"p1" : "a",
"p3" : "c"
}

, и порядок не имеет значения, но отношение ключей и значений должно быть таким же, как origin.

Я попытался jq '.properties | (keys_unsorted, .[].value)', и это дает:

[
  "p2",
  "p1",
  "p3"
]
"b"
"a"
"c"

, затем я разделил команду на jq '.properties | keys_unsorted' и jq '.properties | .[].value', выполнил некоторое редактирование руками, и используйте команду paste для объединения результатов.

Существует ли более разумный способ?

1 Ответ

2 голосов
/ 24 марта 2020

Вы ищете map_values.

$ jq '.properties | map_values(.value)' file
{
  "p2": "b",
  "p1": "a",
  "p3": "c"
}
...