You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地通过HTTP请求创建Flow Run时传递参数遭遇GRAPHQL_PARSE_FAILED错误的解决方法

解决GraphQL Mutation中含转义参数的请求语法错误问题

问题分析

你遇到的GRAPHQL_PARSE_FAILED错误,核心原因是Python字符串的转义逻辑和GraphQL对JSON字符串的要求不匹配:

  • 在GraphQL的mutation里,parameters的值需要是一个转义后的JSON字符串(内部引号必须用\"转义);
  • 但在Python的普通三重引号字符串中,\"会被自动解析为普通的",导致实际发送给GraphQL的parameters内容丢失了必要的转义,直接引发语法解析失败。

解决方案

下面提供三种可靠的解决方式,按推荐程度排序:

方法1:使用Python原始字符串(最直观,推荐)

在定义mutation字符串时,在三重引号前加上r(原始字符串标识),这样Python不会处理字符串内的转义字符,\"会被原样发送给GraphQL:

import requests

headers = {"Content-Type": "application/json", 'tenant_id': 'f874d20a-ba21-4c7f-1111-d43cbf4751e9'}
# 加上r变成原始字符串,保留所有转义符
query = r"""mutation { 
    create_flow_run( 
        input: {
            flow_id: "cabfecfb-8ce7-47aa-9ba4-c181dbf4a430", 
            parameters: "{ \"points_y_column\": \"lat\", \"points_x_column\": \"lon\", \"out_format\": \"CSV\"}"
        } 
    ) { id } 
}"""
req_url = "http://localhost:4200/graphql"
r = requests.post(req_url, json={"query": query}, headers=headers)
print(r.json())

方法2:单独序列化parameters的JSON(更健壮,适合复杂参数)

把parameters对应的字典单独用json.dumps()序列化,自动处理转义,再插入到mutation字符串中。这种方式避免手动转义,几乎不会出错:

import requests
import json

headers = {"Content-Type": "application/json", 'tenant_id': 'f874d20a-ba21-4c7f-1111-d43cbf4751e9'}
# 先定义parameters的字典结构
params_dict = {
    "points_y_column": "lat",
    "points_x_column": "lon",
    "out_format": "CSV"
}
# 序列化为自动转义的JSON字符串
params_json = json.dumps(params_dict)
# 插入到mutation中,注意用{{}}转义f-string里的大括号
query = f"""mutation {{ 
    create_flow_run( 
        input: {{
            flow_id: "cabfecfb-8ce7-47aa-9ba4-c181dbf4a430", 
            parameters: "{params_json}"
        }} 
    ) {{ id }} 
}}"""
req_url = "http://localhost:4200/graphql"
r = requests.post(req_url, json={"query": query}, headers=headers)
print(r.json())

方法3:使用双转义符

在Python字符串中,用\\"代替\",这样Python解析后会输出\"发送给GraphQL:

import requests

headers = {"Content-Type": "application/json", 'tenant_id': 'f874d20a-ba21-4c7f-1111-d43cbf4751e9'}
# 用\\转义\,最终发送的内容里会保留\"
query = """mutation { 
    create_flow_run( 
        input: {
            flow_id: "cabfecfb-8ce7-47aa-9ba4-c181dbf4a430", 
            parameters: "{ \\\"points_y_column\\\": \\\"lat\\\", \\\"points_x_column\\\": \\\"lon\\\", \\\"out_format\\\": \\\"CSV\\\"}"
        } 
    ) { id } 
}"""
req_url = "http://localhost:4200/graphql"
r = requests.post(req_url, json={"query": query}, headers=headers)
print(r.json())

验证技巧

你可以打印出query变量的内容,检查实际发送的字符串是否符合GraphQL要求:

print(query)

正确的parameters值应该是:"{ \"points_y_column\": \"lat\", ... }",而不是"{ "points_y_column": "lat", ... }"。

内容的提问来源于stack exchange,提问作者GolD.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:44:08