![Jq: Выберите ключ и значение одного реквизита](https://rvso.com/image/178463/Jq%3A%20%D0%92%D1%8B%D0%B1%D0%B5%D1%80%D0%B8%D1%82%D0%B5%20%D0%BA%D0%BB%D1%8E%D1%87%20%D0%B8%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%B0.png)
У меня есть файл перевода json, который структурирован следующим образом.
{
"STRING_ID_1": {
"en": "Some englisch text.",
"de": "Some german text."
},
"STRING_ID_2": {
"en": "Some other englisch text.",
"de": "Some other german text."
},
...
}
Используя это как входные данные, мне нужно сгенерировать два файла: "en.json" и "de.json". Они должны иметь следующий формат.
{
"STRING_ID_1": "Some englisch text.",
...
}
и
{
"STRING_ID_1": "Some german text.",
...
}
Мне кажется, это jq
тот инструмент, который вы хотите здесь использовать. Может ли кто-нибудь дать мне правильную команду?
решение1
$ cat file.json
{
"STRING_ID_1": {
"en": "Some englisch text.",
"de": "Some german text."
},
"STRING_ID_2": {
"en": "Some other englisch text.",
"de": "Some other german text."
}
}
$ jq 'with_entries(.value = .value.en)' file.json
{
"STRING_ID_1": "Some englisch text.",
"STRING_ID_2": "Some other englisch text."
}
$ jq 'with_entries(.value = .value.de)' file.json
{
"STRING_ID_1": "Some german text.",
"STRING_ID_2": "Some other german text."
}
Перенаправьте на другое имя файла, чтобы сохранить вывод.
Преобразование переписывает значение каждого ключа верхнего уровня, чтобы оно стало значением английской (или немецкой) строки, а не объектом пар ключ-значение.