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

代码运行报TypeError:JSON对象需为str/bytes/bytearray而非dict求解决方案

问题描述

运行代码时持续触发TypeError错误,错误提示为:the JSON object must be str, bytes or bytearray, not dict

错误栈信息:

[2022-08-09 15:45:53,741] ERROR in app: Exception on /canary/live_birds [GET]
Traceback (most recent call last):
  File "/Users/s153152/Documents/Workspace/ssd_dashboard/venv/lib/python3.8/site-packages/flask/app.py", line 2073, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/s153152/Documents/Workspace/ssd_dashboard/venv/lib/python3.8/site-packages/flask/app.py", line 1518, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/s153152/Documents/Workspace/ssd_dashboard/venv/lib/python3.8/site-packages/flask/app.py", line 1516, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/s153152/Documents/Workspace/ssd_dashboard/venv/lib/python3.8/site-packages/flask/app.py", line 1502, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/Users/s153152/Documents/Workspace/ssd_dashboard/app/bin/auth_functions.py", line 52, in decorated_view
    return func(*args, **kwargs)
  File "/Users/s153152/Documents/Workspace/ssd_dashboard/app/views/canaries/view.py", line 25, in live_birds
    vm = Canaries()
  File "/Users/s153152/Documents/Workspace/ssd_dashboard/app/viewmodels/canaries/canaries_viewmodel.py", line 27, in __init__
    self.get_live_birds()
  File "/Users/s153152/Documents/Workspace/ssd_dashboard/app/viewmodels/canaries/canaries_viewmodel.py", line 35, in get_live_birds
    y = json.loads(response_json)
  File "/usr/local/Cellar/python@3.8/3.8.13/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/__init__.py", line 341, in loads
    raise TypeError(f'the JSON object must be str, bytes or bytearray, '

相关代码:

def get_live_birds(self):
    r = requests.get(self.baseurl+"/devices/live", params=self.payload)
    response_json = r.json()
    y = json.loads(response_json)
    print(y)

调用Canary Tools官方接口后,不清楚如何处理r.json()来解决错误。

解决方案

问题核心是对requests库的r.json()方法理解偏差:

  • r.json()已经将接口返回的JSON格式字符串解析为Python字典,不需要再用json.loads()重复解析。json.loads()仅用于将JSON字符串转成Python对象,传入字典必然触发TypeError。

直接使用解析后的字典即可,删除多余的json.loads()调用:

def get_live_birds(self):
    r = requests.get(self.baseurl+"/devices/live", params=self.payload)
    response_json = r.json()
    print(response_json)

如果确实需要将解析后的字典转回JSON字符串,改用json.dumps()方法:

import json

def get_live_birds(self):
    r = requests.get(self.baseurl+"/devices/live", params=self.payload)
    response_dict = r.json()
    # 将Python字典转为JSON字符串
    response_str = json.dumps(response_dict)
    print(response_str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:57:19