【问题标题】:Convert string to JSON in Python?在 Python 中将字符串转换为 JSON?
【发布时间】:2026-01-22 23:35:01
【问题描述】:

我正在尝试转换一个使用 urllib3 从 http 请求生成的字符串。

Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    data = json.load(data)
  File "C:\Python27\Lib\json\__init__.py", line 286, in load
    return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'

>>> import urllib3
>>> import json
>>> request = #urllib3.request(method, url, fields=parameters)
>>> data = request.data

现在...尝试以下操作时,我收到了该错误...

>>> json.load(data) # generates the error
>>> json.load(request.read()) # generates the error

运行type(data)type(data.read()) 都返回&lt;type 'str'&gt;

data = '{"subscriber":"0"}}\n'

【问题讨论】:

  • 您的 JSON 有一个额外的括号。这是故意的吗?
  • “将字符串转换为 JSON”是什么意思? JSON一种字符串格式。您想将 JSON 转换为适当的本机 Python 对象(在本例中是一个将一个字符串映射到另一个字符串的 dict)?还是将一些非 JSON 字符串转换为 JSON 字符串,或者其他的东西?
  • 如果data 是一个字符串,type(data.read()) 不应该工作。
  • 事实上,type(data.read())保证引发与json.load(data)完全相同的异常。我认为他的意思是type(request.read()),它将成功返回str 类型。
  • 额外的括号是一个错字。对于那个很抱歉。 data.read() 是一个错字。

标签: python json urllib3


【解决方案1】:

json.load 从类文件对象加载。你要么想用json.loads

json.loads(data)

或者只是在请求上使用json.load,这是一个类似文件的对象:

json.load(request)

另外,如果你使用 requests 库,你可以这样做:

import requests

json = requests.get(url).json()

【讨论】:

  • 或者,不要将json.load(request.read()) 变成json.loads(request.read()),而是直接调用json.load(request)
  • 我正在使用 requests 库,尽管它目前已被注释掉。在不允许我运行它的 Google Apps Engine 上工作,并且 urlfetch 在同一个 GET 请求上遇到问题。所以,他们支持原始 urllib3,这就是我正在测试的。 json.loads(request.data) 是 wokring,json.load(request) 不是。感谢您的帮助。
  • ` json = requests.get(url).json()` 也不适用于我原来的代码行pageContent = requests.get(url,verify=False).json()