在 jq 版本 1.3 中,如何仅显示不是数组或对象的顶级 JSON 条目?

nfz*_*z11 3 json jq

我有一个 JSON 结构,我只想打印简单类型的条目,例如不是数组或对象。

输入示例:

{
  "person": {
    "address": {
      "city": "NY",
      "street": "Wall Street"
    },
    "god": true,
    "nicks": [
      "Lar",
      "L",
      "Yo"
    ],
    "name": "Larry",
    "id": 1
  }
}
Run Code Online (Sandbox Code Playgroud)

预期输出:

"god": true,
"name": "Larry",
"id": 1
Run Code Online (Sandbox Code Playgroud)

我尝试了许多不同的变体,但都不起作用:

jq '.person | with_entries(.) | select(map(type) != "array" and map(type) != "object")'

请注意,我使用的是 jq 1.3 版本。

预先感谢您的任何帮助。

Jef*_*ado 6

你实际上并没有对with_entries那里的呼叫做任何事情。但你可能应该在那里进行过滤。过滤值的类型既不是数组也不是对象的条目。

.person | with_entries(select(.value | type | . != "array" and . != "object"))
Run Code Online (Sandbox Code Playgroud)

如果您使用的是更新版本的 jq,您可以使用scalars内置函数进行过滤,它可以有效地执行相同的操作。

.person | with_entries(select(.value | scalars))
Run Code Online (Sandbox Code Playgroud)