Json 使用jq基于值从列表中选择对象,访问顶级对象

Json 使用jq基于值从列表中选择对象,访问顶级对象,json,jq,Json,Jq,所以我有一个这样的结构: [ { "name": "aaaaa", "type": "A", "class": "IN", "status": "NOERROR", "data": { "answers": [ { "ttl": 30, "type": "CNAME", "class": "IN", "name": "aaaaa", "data": "bbbbb"

所以我有一个这样的结构:

[
{
  "name": "aaaaa",
  "type": "A",
  "class": "IN",
  "status": "NOERROR",
  "data": {
    "answers": [
      {
        "ttl": 30,
        "type": "CNAME",
        "class": "IN",
        "name": "aaaaa",
        "data": "bbbbb"
      },
      {
        "ttl": 1800,
        "type": "CNAME",
        "class": "IN",
        "name": "bbbbb",
        "data": "ccccc"
      },
      {
        "ttl": 60,
        "type": "A",
        "class": "IN",
        "name": "ccccc",
        "data": "1.2.3.4"
      }
    ],
},
{
  "name": ...
...

它基本上是一个DNS解析数据列表

对于每个问题,可能有多个答案。我只关心
类型:“A”
记录。在做了一点工作和阅读之后,我想到了这个:

. | select(
    (.status = "NOERROR") and
    (.class = "IN") and
    (.data.answers? != null)) | select(.data.answers | map(select(.type == "A")))
这只用于提供类型为“A”的对象。但是,由于我构建它的方式,我丢失了顶级“name”值。返回的唯一内容是实际的
answer
对象本身,即
answers[]

问题是,我需要访问原始(顶级)名称值。我错过了一些简单的事情,有人能帮我一下吗

谢谢

编辑:我想在最后打印的基本上是顶级的
.name
值和每个
.data
值,其中
类型==“A”
。有一种可能更简单的方法可以做到这一点,所以如果有一种完全不同的方法,我也很高兴听到这个

EDIT2:我原本以为这会更简单,但我做到了:

. | select(
  (.status = "NOERROR") and
  (.class = "IN") and
  (.data.answers? != null) and
  (.data.answers[].type=="A")) | .
。。。但这会返回整个
A
CNAME
和其他类型的值列表,似乎只要存在一个
A
。那就没有运气了

但是,由于我构建它的方式,我丢失了顶级“name”值

那就呆在顶级吧

.[]
| select(.class == "IN" and .status == "NOERROR")
| .name + ": " + (.data.answers[] | select(.type == "A") .data)?

@oguz ismail的答案是有效的,我只需将
[]
更改为
,否则就会出现字符串索引错误。可能是因为我没有清楚地表示数据结构。谢谢