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

Python Flask跨API调用后如何正确返回无转义JSON字符串

解决Flask API间调用返回JWT字符串的序列化与格式问题

我刚好碰到过类似的场景,两个Swagger生成的Flask服务互相调用,处理返回的JWT字符串时踩了同样的坑。先理清楚问题出在哪,再给你最直接的解决方案:

问题回顾

Server2的API2返回的是JWT编码后的字符串,但Server1调用后处理返回值时遇到两个麻烦:

  • 直接返回resp.content会触发Object of type 'bytes' is not JSON serializable错误,因为content是bytes类型,Flask无法直接序列化返回
  • 用resp.content.decode()转成字符串后,结果带了多余的转义双引号和换行符,变成"\"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9\"\n",不符合需求

先贴一下你的相关代码方便对照:

Server2的API2代码

def Server2_API2():
    payload = { "value1": 'somedata', "value2": 'somedata', }
    encoded_payload = jwt.encode(payload, SECRET, algorithm=ALGORITHM)
    return encoded_payload  # 返回字符串形式的JWT:'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.'

Server1的API1调用代码(原版本)

def Server1_API1():
    resp = requests.post('http://localhost:1000/API2', data='value1=one&value2=two')
    if resp.status_code == 200:
        first_try = resp.content  # 结果是b'"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"\n'
        second_try = resp.content.decode()  # 结果是'"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9" '(带换行符)
        return first_try  # 报错;返回second_try则格式不对

完美解决方案

其实requests库已经帮我们封装了更省心的方法——resp.json(),一行代码就能解决所有问题:

修改后的Server1 API1代码

def Server1_API1():
    resp = requests.post('http://localhost:1000/API2', data='value1=one&value2=two')
    if resp.status_code == 200:
        clean_jwt = resp.json()  # 直接拿到纯净的JWT字符串:"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"
        return clean_jwt

为什么这个方法有效?

因为Flask在返回字符串时,默认会把它包装成JSON响应(也就是给字符串加了双引号,并且以JSON格式返回)。resp.json()会自动完成:

  1. 将bytes类型的响应内容解码成字符串
  2. 解析JSON格式的内容,直接提取出原始的JWT字符串
  3. 自动去掉多余的转义符和换行符

这样返回的就是你需要的无报错、无多余符号的纯净JWT字符串了!

内容的提问来源于stack exchange,提问作者Harry Boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:25:32