如何通过jq将json文件中的星号解析为字符串

时间:2018-03-06 07:26:03

标签: json shell sh jq

这是一个名为test.json的json文件,用于测试

{
    "name": "Google",
    "location": {
        "street": "1600 Amphitheatre Parkway",
        "city": "Mountain View",
        "state": "California",
        "country": "US"
    },
    "employees": [
        {
            "name": "Michael",
            "division": "Engineering"
        },
        {
            "name": "Laura",
            "division": "HR"
        },
        {
            "name": "Elise",
            "division": "Marketing * test"
        }
    ]
}

如果我使用jq代码解析它,如下所示:

cat test.json | jq -r '.employees[2].division'

它会很好地运作并给出正确的结果:

Marketing * test

但是我使用$(),会发生坏事!

echo $(cat test.json | jq -r '.employees[2].division')

结果将列出当前文件夹下的所有文件名!像:

my1.json my2.json test.json test ...

我猜它$()将asterisk *作为shell脚本运行,但是一个字符串。

那么当我使用*时,如何在json文件中使用星号(jq)作为字符串?我正在使用Google云平台和Ubuntu 17.10

1 个答案:

答案 0 :(得分:2)

始终在命令替换周围使用双引号以避免*按字面处理。 *是shell中的一个特殊字符,它是一个通配符条目,可扩展到当前工作目录中的所有可用文件。您需要引用它以剥夺其特殊含义(请参阅参数部分下的GNU bash man page)。

同样jq可以直接处理文件,您可以避免无用的cat使用。

result="$(jq -r '.employees[2].division' < test.json)"
echo "$result"

应按预期产生结果。