仅保留具有字符串值的字段

3

我有一个像这样的JSON结构:

{
  "1": "a-secret",
  "A": "b-secret",
  "2": {
    "3": "ab-secret",
    "4": {
      "5": "adc-secret"
    },
    "6": {
      "7": "abdc-secret"
    }
  }
}

我正在尝试创建一个命令(最好是一行)来返回仅具有字符串值的键对。因此,对于上面的示例,它将返回:
{
  "1": "a-secret",
  "A": "b-secret"
}

我发现.[]|strings只返回字符串值,但我需要键和值,这让我陷入了困境!
2个回答

4
你需要查找 map_values
$ jq 'map_values(strings)' file
{
  "1": "a-secret",
  "A": "b-secret"
}

1
作为一种替代方案,特别是在版本早于 jq-1.6 的情况下,您可以使用 with_entries 对值类型为 string 进行过滤。
with_entries(select(.value | type == "string"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接