【问题标题】:Python (json) : TypeError: expected string or bufferPython(json):TypeError:预期的字符串或缓冲区
【发布时间】:2016-07-15 17:40:48
【问题描述】:

我想从我的数据库中读取数据,然后创建一个 json 格式并将其返回到我的 python web 服务器 (web.py)。但是下面的代码不起作用并给我这个错误:

TypeError:预期的字符串或缓冲区

在加载和加载之间切换也转储和转储(我不明白为什么)。正如你所知,我对 python 和 json 格式都很陌生,如果你能帮助我,我将非常感激(看到很多关于这个的帖子问题,但仍然无法弄清楚该怎么做)

def ara_json(str):
    web.header('Content-Type','application/json; charset=utf-8', unique=True) 
    cnx = mysql.connector.connect(user='arda', password='1', database='worddb')
    cursor = cnx.cursor()
    sqlq = "SELECT * FROM names WHERE name = '%s'" %str
    cursor.execute(sqlq)
    rows = cursor.fetchall()

    result=[]
    for row in rows:
            d = dict()
            d['name'] = row[0]
            d['type'] = row[1]
                result.append(d)
            subjects = json.loads(result).read()
        return json.dump(subjects , indent=4)


class json_isimbul:
    def GET(self,isim):
    web.header('Content-Type','application/json; charset=utf-8', unique=True)    
    isim = isim.lower()
    return ara_json(isim)

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 239, in process
    return self.handle()
  File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 230, in handle
    return self._delegate(fn, self.fvars, args)
  File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 420, in _delegate
    return handle_class(cls)
  File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 396, in handle_class
    return tocall(*args)
  File "/home/arda/Downloads/arda/tmp/tornado/ps/sa2.py", line 98, in GET
    return ara_json(isim)
  File "/home/arda/Downloads/arda/tmp/tornado/ps/sa2.py", line 53, in ara_json
    subjects = json.loads(result).read()
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer

【问题讨论】:

  • 你能显示你的异常的回溯吗?仅凭类型和短消息,很难知道代码的哪一部分引发了该错误,而回溯会非常清楚地显示这一点。
  • 对不起。刚刚编辑,希望你能理解

标签: python json web.py


【解决方案1】:

json.loads() 需要一个字符串。正确的方法是首先构造您的数据并使用json.dumps,这将为您提供一个json对象(实际上是一个字符串)。希望这会有所帮助。

【讨论】:

  • 字符串对象。 Python 中的一切都是对象。
  • 是的。但是json.dumps 返回的是 json 字符串而不是 json 对象。我只是想澄清一下。
  • 谢谢。我知道完全没有必要使用负载。 json.dumps(result) 给了我我想要的。必须多学习! :)
【解决方案2】:

你必须改变两行,它会正常工作。

  1. 删除这一行:subjects = json.loads(result).read()
  2. 然后这样做:return json.dumps(result , indent=4)

希望对您有所帮助。 :)

【讨论】:

  • 我完全按照我在第一个答案中写的那样做了。两个答案都有很大帮助,谢谢
猜你喜欢
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2013-04-18
  • 2017-08-29
  • 2020-04-02
相关资源
最近更新 更多