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

使用Airflow Web API创建JSON类型变量报错400的问题排查

Airflow API创建JSON格式变量失败的解决办法

Airflow Variables REST API要求value字段必须是字符串类型,你直接传入JSON对象会触发类型校验失败,这就是返回400错误的原因。Airflow支持存储JSON格式的变量内容,但需要先把JSON对象序列化为字符串再传入。

修正后的curl脚本

方式1:手动转义JSON为字符串

把value里的JSON对象转成转义后的字符串:

curl -X POST "${AIRFLOW_URL}/api/v1/variables" \
        -H "Content-Type: application/json" \
        --user "${AIRFLOW_USERNAME}:${AIRFLOW_PASSWORD}" \
        -d '{"key": "my_json_var", "value": "{\"key1\":\"val1\",\"key2\":\"123\"}"}'

方式2:用jq自动处理(避免手动转义)

如果系统安装了jq,可以用它来自动序列化JSON,更简洁不易出错:

curl -X POST "${AIRFLOW_URL}/api/v1/variables" \
        -H "Content-Type: application/json" \
        --user "${AIRFLOW_USERNAME}:${AIRFLOW_PASSWORD}" \
        -d "$(jq -n --argjson value '{"key1":"val1","key2":"123"}' '{key: "my_json_var", value: ($value | tostring)}')"

修正后的Python requests代码

用json.dumps()把字典序列化为字符串后传入:

import requests
import json

airflow_url = "你的Airflow地址"
auth = ("用户名", "密码")

payload = {
    "key": "my_json_var",
    "value": json.dumps({"key1": "val1", "key2": "123"})
}

response = requests.post(
    f"{airflow_url}/api/v1/variables",
    json=payload,
    auth=auth
)

print(response.status_code)
print(response.json())

当你需要读取这个变量时,Airflow会自动把字符串反序列化为JSON对象(比如在DAG中用Variable.get("my_json_var", deserialize_json=True))。

内容的提问来源于stack exchange,提问作者Viktorov Ivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:16:07