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

问题描述 投票:2回答:1

这是一个名为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)就像一个字符串?我正在使用谷歌云平台和Ubuntu 17.10

json shell sh jq
1个回答
2
投票

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

另外jq可以直接处理文件,你可以避免使用无用的cat

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

应该按预期产生结果。

© www.soinside.com 2019 - 2024. All rights reserved.