来自 Gatsby 中单个对象 JSON 文件的 GraphQL 模式

sar*_*eeh 3 graphql-js gatsby

所以我想从 Gatsby 的 GraphQL 查询一个不是数组的 JSON 文件,但我真的不知道该怎么做。

据我了解gatsby-transformer-json文档 - 它只支持加载数组并通过allFileNameJson模式访问它们。

我的gatsby-config插件(只有这个问题的必要插件):

{
  resolve: 'gatsby-source-filesystem',
  options: {
    name: 'data',
    path: `${__dirname}/src/data`
  }
},
'gatsby-transformer-json'
Run Code Online (Sandbox Code Playgroud)

然后让我们说src/data我有一个something.json文件,如下所示:

{
  "key": "value"
}
Run Code Online (Sandbox Code Playgroud)

现在我想从something.json文件中查询数据,但没有somethingJson我可以查询的模式(尝试使用 Gatsby 的 GraphiQL)。

有人可以指出我做错了什么或者我该如何解决这个问题?

sar*_*eeh 5

好的,只要有父对象(文件夹),就可以查询单对象文件。

让我们来看看这些参数:

  • gatsby-source-filesystem 配置为 src/data
  • test.json文件定位于src/data/test.json其中的{ "key": "value" }内容

现在因为test.json文件实际上有一个父(data文件夹) - 您可以test.json像这样查询字段:

{
  dataJson {
    key
  }
}
Run Code Online (Sandbox Code Playgroud)

但是将它们直接放在根文件夹中是一种不好的做法,因为当您将存储另一个 json 文件(即secondtest.json包含{ "key2": "value2" }内容)并使用与上述相同的查询对其进行查询时,您将仅从单个节点获取数据(不确定是否它需要第一个或最后一个遇到的节点),

因此,对于这种情况,完美的解决方案是将单对象 json 文件存储在单独的文件夹中,每个文件夹只有一个 json。

例如,您有一些“关于我”的数据:

  1. about在您的文件夹中创建一个文件夹src/data
  2. index.json用 ie创建一个文件{ "name": "John" }
  3. 查询您的数据

像这样:

{
  aboutJson {
    name
  }
}
Run Code Online (Sandbox Code Playgroud)

就是这样。