web-dev-qa-db-ja.com

Python(json):TypeError:予期される文字列またはバッファ

データベースからデータを読み取り、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
5
Arda Nalbant

2行を変更する必要があり、正常に機能します。

  1. この行を削除します:subjects = json.loads(result).read()
  2. そしてこのようにします:return json.dumps(result、indent = 4)

うまくいけば、それはあなたを助けるでしょう。 :)

6

json.loads()は文字列を必要とします。これを行う正しい方法は、最初にデータを作成し、json.dumpsを使用することです。これにより、jsonオブジェクト(実際には文字列)が得られます。お役に立てれば。

8
Bhimsen