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

Python中requests.post获取JSON字符串遇AttributeError问题求助

解决你的JSON处理与AttributeError问题

让我们一步步拆解你的问题,先解决眼前的错误,再处理根源的格式问题:

1. 立即修复AttributeError

你当前代码里的json.dumps(r.text)完全搞反了JSON处理的方向:

  • json.dumps()是把Python对象转换成JSON字符串,而你现在拿到的r.text已经是字符串了,执行后data还是个字符串,自然没有.get()方法。
  • 你需要的是把JSON字符串转换成Python字典,应该用json.loads(),或者更简单的requests内置的.json()方法。

修正后的客户端代码:

def grab_tweet():
    return requests.post("http://gateway:8080/function/twittersend")

r = grab_tweet()
# 先确保请求成功
if r.ok:
    # 直接用r.json()解析响应为Python字典
    data = r.json()
    return data.get('tweet')
else:
    print(f"请求失败,状态码:{r.status_code}")
    return None

2. 解决根源:非标准JSON格式问题

你提到r.text返回的是{u'tweet': u'RT THIS IS THE TWEET BLAH BLAH…', u'language': u'en'},这不是标准JSON——标准JSON用双引号,也没有u前缀(那是Python 2里字符串的表示)。这说明你的本地服务返回的不是真正的JSON,而是Python字典的字符串表示(repr输出)。

修复本地服务的返回逻辑

你的本地读取函数现在直接返回了加载后的字典,导致服务框架把它转成了Python风格的字符串。需要改成返回标准JSON:

如果你的本地服务用的是Flask这类框架,用jsonify返回:

import json
from flask import jsonify

def your_local_service_function():
    with open('jsonOutputfile.txt') as f:
        jsonObject = json.load(f)
    # jsonify会自动把字典转成标准JSON,并设置正确的Content-Type
    return jsonify(jsonObject)

如果是自定义的服务逻辑,手动序列化并设置响应头:

import json

def your_local_service_function():
    with open('jsonOutputfile.txt') as f:
        jsonObject = json.load(f)
    # 把字典转成标准JSON字符串
    json_str = json.dumps(jsonObject)
    # 返回时设置Content-Type为application/json
    return json_str, 200, {'Content-Type': 'application/json'}

3. 验证步骤

  1. 先检查jsonOutputfile.txt里的内容,确保是标准JSON(双引号,无u前缀):
    正确的内容应该是:
    {"tweet": "RT THIS IS THE TWEET BLAH BLAH…", "language": "en"}
    
  2. 用curl测试本地服务:
    curl http://gateway:8080/function/twittersend
    
    确认返回的是上面的标准JSON格式,而不是Python风格的字符串。

这样调整后,客户端的.json()方法就能正确解析,.get('tweet')也能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:26:55