如何在Gatsby的GraphQL中查询非数组结构的单个JSON文件?
别担心,这个问题其实挺常见的,我来帮你一步步解决它~
首先纠正一个小误解:gatsby-transformer-json 完全支持单个对象结构的JSON文件,文档里提到的数组支持只是其中一种场景,单个对象也能被正确解析,只是生成的GraphQL结构和数组略有不同。
为什么你找不到somethingJson这个查询入口?
当JSON文件是单个对象而非数组时,Gatsby会自动把它包装进一个集合类型里,也就是你看到的all[FileName]Json格式(这里就是allSomethingJson)。而单个节点的somethingJson入口不会自动生成——这是很多开发者容易踩的坑。
解决步骤
1. 先清理Gatsby缓存(关键!)
Gatsby有时候会缓存旧的Schema结构,导致新添加的JSON文件或者结构变更无法被识别。运行以下命令清除缓存:
gatsby clean
2. 重启开发服务器
缓存清理完成后,重新启动开发服务:
gatsby develop
3. 使用正确的GraphQL查询
现在你可以在GraphiQL里用allSomethingJson来查询你的数据,然后通过nodes[0]获取单个对象的内容,示例查询如下:
query GetSingleJsonData { allSomethingJson { nodes { key } } }
返回的结果会是:
{ "data": { "allSomethingJson": { "nodes": [ { "key": "value" } ] } } }
你只需要取allSomethingJson.nodes[0].key就能拿到你想要的值。
额外检查项
- 确认你的
something.json确实放在src/data目录下,文件名没有拼写错误(大小写也要注意,Gatsby的Schema是区分大小写的) - 检查
gatsby-config.js里的gatsby-source-filesystem配置,确保path指向的目录正确,比如${__dirname}/src/data没有写错路径分隔符或者目录名
内容的提问来源于stack exchange,提问作者jsardev
相关产品推荐
相关产品推荐

