脚本,用于从存储在配置文件中的JSON格式的特定键获取结构

时间:2020-02-12 10:57:58

标签: bash

我在配置文件中保存了以下结构(类似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 可能有也可能没有“ relevant_key ”作为键。 我想找到以“ relevant_key”为键的结构。 因此,对于上面的示例,我希望将以下列表存储在文件中

valueOne
valueTwo
valueFour

由于 valueThree 没有以“ relevant_key”作为键。

我对编写脚本完全陌生,是否可以使用jq? 我不希望将整个脚本作为答案,但是前进的方向会很有帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

首先,您需要将其转换为有效的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(在这种情况下为 okJson 变量),您就可以轻松地使用JQ完成您想要的目标:

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

让我知道是否有帮助!

相关问题