Скрипт для получения структур с указанными c ключами из JSON подобного формата, хранящегося в файле конфигурации - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть следующая структура (JSON -подобный формат), сохраненная в файле конфигурации.

exampleStruct = {
    valueOne = {
        irrelevant_key_1 = true;
        irrelevant_key_2 = true;
        relevant_key = true;
    };
    valueTwo = {
        irrelevant_key_1 = true;
        irrelevant_key_2 = true;
        relevant_key = true;
    };
    valueThree = {
        irrelevant_key_1 = true;
        irrelevant_key_2 = true;
    };
    valueFour = {
        irrelevant_key_1 = true;
        relevant_key = true;
    };
}

Структуры внутри основной структуры, т.е. valueOne , valueTwo может иметь или не иметь " related_key " в качестве ключа. Я хочу найти структуры, в которых ключ «релевантный» указан в качестве ключа. Итак, для приведенного выше примера я хочу, чтобы следующий список был сохранен в файле

valueOne
valueTwo
valueFour

, так как valueThree не имеет значения «related_key» в качестве ключа.

Я совершенно новичок в написании сценариев, есть ли возможность использовать jq? Мне не нужен весь сценарий в качестве ответа, но направление на go вперед очень поможет.

Спасибо

1 Ответ

1 голос
/ 12 февраля 2020

Сначала вам нужно преобразовать это в действительный JSON. Этот трюк должен сделать это:

semiJson=$( printf "{\n%s\n}" "$( sed -E $'s/=/:/g;s/;/,/g;s/([a-zA-Z0-9_]+)/"\\1"/g;s/"true"/True/g' semiJson.sjson )")

okJson=$( python3 -c "
import json
dict = $semiJson
print(json.dumps(dict, indent='  '))
")

Если у вас есть действительная переменная JSON ( ok Json в этом случае), вы можете легко использовать JQ для выполнения sh что Вы намереваетесь:

echo "$okJson" | jq '.exampleStruct | with_entries(select(.value.relevant_key == true)) | keys'
[
  "valueFour",
  "valueOne",
  "valueTwo"
]

Дайте мне знать, если это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...