在GraphQL中,如何在查询级别丢弃空数组(而不是在查询之后循环) 背景

在GraphQL中,如何在查询级别丢弃空数组(而不是在查询之后循环) 背景,graphql,Graphql,我有一个通过GraphQL获得的菜单。它最多可以在两个级别内嵌套项目。 当我检索数据时,如果没有子链接,我会得到空数组 查询 我的问题是这样的 { label url links { label url links { label url } } } { "data": { "menu": [ { "label": "menu item 1", "url": "htt

我有一个通过GraphQL获得的菜单。它最多可以在两个级别内嵌套项目。 当我检索数据时,如果没有子链接,我会得到空数组

查询 我的问题是这样的

{
  label
  url
  links {
    label
    url
    links {
      label
      url
    }
  }
}
{
  "data": {
    "menu": [
      {
        "label": "menu item 1",
        "url": "https://my-site",
        "links": []
      },
      {
        "label": "menu item 2",
        "url": "https://my-site/2",
        "links": []
      },
      {
        "label": "menu item with sub items",
        "url": "https://my-site/got-subs",
        "links": [
          {
            "label": "sub menu item 1",
            "url": "https://my-site/got-subs/1",
            "links": []
          },
          {
            "label": "sub menu item 2",
            "url": "https://my-site/got-subs/2",
            "links": []
          }
        ]
      },
    ]
  }
}
因此,在每一个层次上,都有可能在下面有一系列额外的链接

资料 当我检查数据时,它看起来像这样

{
  label
  url
  links {
    label
    url
    links {
      label
      url
    }
  }
}
{
  "data": {
    "menu": [
      {
        "label": "menu item 1",
        "url": "https://my-site",
        "links": []
      },
      {
        "label": "menu item 2",
        "url": "https://my-site/2",
        "links": []
      },
      {
        "label": "menu item with sub items",
        "url": "https://my-site/got-subs",
        "links": [
          {
            "label": "sub menu item 1",
            "url": "https://my-site/got-subs/1",
            "links": []
          },
          {
            "label": "sub menu item 2",
            "url": "https://my-site/got-subs/2",
            "links": []
          }
        ]
      },
    ]
  }
}
问题: 如何在查询级别删除空数组,使数据看起来像这样

{
  "data": {
    "menu": [
      {
        "label": "menu item 1",
        "url": "https://my-site",
      },
      {
        "label": "menu item 2",
        "url": "https://my-site/2",
      },
      {
        "label": "menu item with sub items",
        "url": "https://my-site/got-subs",
        "links": [
          {
            "label": "sub menu item 1",
            "url": "https://my-site/got-subs/1",
          },
          {
            "label": "sub menu item 2",
            "url": "https://my-site/got-subs/2",
          }
        ]
      },
    ]
  }
}

很抱歉你被否决了。一些人似乎认为,如果一个问题没有答案,就需要否决它。因此,简单的回答是,这是不可能做到的。GraphQL是关于返回的JSON对于客户端是可预测的。如果列表为空,则可以使返回类型为null,并且解析器可以返回
null
。但在大多数客户机代码中,当空数组正常工作时,这将引入额外的空检查(循环不会运行单个迭代)。为什么要将其从回复中删除?Hi@Herku感谢您添加评论。我想删除空数据以使测试更容易,因为模拟数据需要填写所有空数组和空值,这非常严格。但我可以像你说的那样加上额外的支票。如果你把你的评论作为回答,我将欣然接受。谢谢。很抱歉你被否决了。一些人似乎认为,如果一个问题没有答案,就需要否决它。因此,简单的回答是,这是不可能做到的。GraphQL是关于返回的JSON对于客户端是可预测的。如果列表为空,则可以使返回类型为null,并且解析器可以返回
null
。但在大多数客户机代码中,当空数组正常工作时,这将引入额外的空检查(循环不会运行单个迭代)。为什么要将其从回复中删除?Hi@Herku感谢您添加评论。我想删除空数据以使测试更容易,因为模拟数据需要填写所有空数组和空值,这非常严格。但我可以像你说的那样加上额外的支票。如果你把你的评论作为回答,我将欣然接受。谢谢