调用OBJKT API时GraphQL查询报invalid-json错误如何正确编写
问题根因
你遇到的报错和逗号、大括号位置无关,核心来自两个独立错误:
- 请求体JSON格式非法:手动拼接JSON字符串时,query字段值内部的双引号没有正确转义,导致JSON解析器读到钱包地址位置时,误判字符串提前结束,抛出预期逗号或闭合括号的解析错误。
- GraphQL查询语法不符合规范:标准GraphQL查询不能直接把筛选条件裸写为query值,必须包裹在操作块内,且明确指定需要返回的字段,否则就算JSON格式正确,也会触发GraphQL语法报错。
修复方案
不要手动拼接JSON字符串,直接构造JS对象后用JSON.stringify序列化,从根源避免转义错误,同时补全正确的GraphQL查询结构:
// 先写对GraphQL查询结构,再做JSON序列化 var data = JSON.stringify({ query: ` query { event(where: {creator_address: {_eq: "tz1SmSqHY1nfy4Wyw9igVow4okezFB4ztXG2"}}) { // 替换为你实际需要获取的返回字段,例如事件ID、创建时间、关联代币信息等 id created_at creator_address } } ` })
如果一定要手动拼JSON字符串,必须对query值内部所有双引号做转义,示例写法如下 (不推荐,极易出错):
var data = '{"query":"query { event(where: {creator_address: {_eq: \"tz1SmSqHY1nfy4Wyw9igVow4okezFB4ztXG2\"}}) { id created_at } }"}';
调试建议
- 写查询时可以先在OBJKT自带的数据浏览器中调试GraphQL语句,确认语句能正常返回预期数据后,再复制到业务代码中使用,配套语法规则可查阅官方API文档。
- 所有JSON格式的请求体,优先使用编程语言自带的JSON序列化方法生成,不要手动拼接字符串,避免低级格式错误。
- 你之前转义双引号没生效,大概率是转义符写法错误、或者转义后仍然没有补全GraphQL要求的操作块和返回字段结构。
内容的提问来源于stack exchange,提问作者cpcdev
相关产品推荐
相关产品推荐

