首页 > 解决方案 > 过滤带有句点的属性名称

问题描述

如何在 MacOS/Linux 上访问名称中包含句点的 JSON 属性的值?

例如,我有一个 JSON 对象,它的根属性名称包含一个句点。例如:

{
    "foo.bar": {
        "one": 1,
        "two": "2",
        "three": {
            "a": "3a",
            "b": "3b"
        }
    }
}

jqplay.org上,过滤器."foo.bar"成功提取了属性的值:

{
    "one": 1,
    "two": "2",
    "three": {
        "a": "3a",
        "b": "3b"
    }
}

但是,在 MacOS 和 Linux (jq v1.5) 上,相同的输入和过滤器(即jq ."foo.bar" file.json不产生输出)。

如果我在过滤器中添加括号(即.["foo.bar"]),我会得到以下信息:

{
  "foo.bar": {
    "one": 1,
    "two": "2",
    "three": {
      "a": "3a",
      "b": "3b"
    }
  }
}
{
  "one": 1,
  "two": "2",
  "three": {
    "a": "3a",
    "b": "3b"
  }
}
1
"2"
{
  "a": "3a",
  "b": "3b"
}
"3a"
"3b"

如何在 MacOS/Linux 上复制 jqplay.org 的行为,以便可以访问名称中带有句点的属性?

标签: jq

解决方案


好的,想通了...我需要将整个过滤器用单引号括起来:

jq '."foo.bar"' file.json

推荐阅读