【问题标题】:How to parse asterisk in json file as string via jq如何通过jq将json文件中的星号解析为字符串
【发布时间】:2018-03-06 07:26:03
【问题描述】:

这是一个名为 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 ...

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

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

【问题讨论】:

    标签: json bash shell sh jq


    【解决方案1】:

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

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

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

    应该会产生预期的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2020-02-28
      相关资源
      最近更新 更多