GraphQL查询以JSON请求执行时失败
问题解决:JSON请求执行GraphQL查询报400错误
问题出在JSON字符串的双引号转义处理上。当把GraphQL查询放在JSON的query字段中时,查询字符串内部的所有双引号都需要双重转义——因为JSON本身用双引号包裹字符串,所以字符串里的双引号要先用反斜杠转义;而GraphQL查询的参数值又需要双引号,因此得再加一层转义,最终用\\"来表示原查询里的双引号。
你的原代码中,after参数的cursor值解码后包含双引号(解码结果:{"last_id":4359983267893,"last_value":"2022-05-23 10:37:23.000000"}),但仅做了单层转义,导致JSON解析器无法正确识别格式,从而返回400错误。
修正后的代码
{ "query": "query{ orders(first: 3, after: \\\"eyJsYXN0X2lkIjo0MzU5OTgzMjY3ODkzLCJsYXN0X3ZhbHVlIjoiMjAyMi0wNS0yMyAxMDozNzoyMy4wMDAwMDAifQ==\\\") { edges { cursor node { id name legacyResourceId email createdAt processedAt totalPriceSet { shopMoney { amount currencyCode } } totalDiscountsSet { shopMoney { amount currencyCode } } totalRefundedSet { shopMoney { amount currencyCode } } subtotalLineItemsQuantity test } } }}" }
更简洁的替代方案
如果觉得手动转义麻烦,可以把GraphQL查询的参数单独抽出来放在variables字段中,彻底避免转义操作:
{ "query": "query($first: Int!, $after: String) { orders(first: $first, after: $after) { edges { cursor node { id name legacyResourceId email createdAt processedAt totalPriceSet { shopMoney { amount currencyCode } } totalDiscountsSet { shopMoney { amount currencyCode } } totalRefundedSet { shopMoney { amount currencyCode } } subtotalLineItemsQuantity test } } }", "variables": { "first": 3, "after": "eyJsYXN0X2lkIjo0MzU5OTgzMjY3ODkzLCJsYXN0X3ZhbHVlIjoiMjAyMi0wNS0yMyAxMDozNzoyMy4wMDAwMDAifQ==" } }
内容的提问来源于stack exchange,提问作者Geoffrey Bell
相关产品推荐
相关产品推荐

