2016-03-28 4 views
1

Я хочу читать данные из своей базы данных, а затем создавать и возвращать json-формат на мой веб-сервер python (web.py). Но следующий код не работает и дает мне эта ошибка:Python (json): TypeError: ожидаемая строка или буфер

TypeError: ожидается строка или буфер

Switched между нагрузками и нагрузкой также отвалами и сбрасывают (который я не могу понять, почему) .Как вы понимаете, я очень новый для оба питона и 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 
+2

Можете ли вы показать трассировку своего исключения? Имея только тип и короткое сообщение, трудно понять, какая часть вашего кода поднимает эту ошибку, и трассировка покажет это очень четко. – Blckknght

+0

Прошу прощения. Просто отредактирован, надеюсь, что вы можете понять. –

ответ

3

Вы должны изменить две линии, и она будет работать нормально.

  1. удалить эту строку: предметы = json.loads (результат) .read()
  2. и делать так: возвращение json.dumps (результат, отступа = 4)

Будем надеяться, что его Вам поможет. :)

+0

Я сделал именно это, как написал в первом ответе. Оба ответа очень помогли –

4

json.loads() ожидает строку. Правильный способ сделать это - сначала построить ваши данные и использовать json.dumps, который даст вам json-объект (фактически строка). Надеюсь это поможет.

+1

Строки * являются * объектами. Все в Python - это объект. – zondo

+0

Да, они есть. Но 'json.dumps' возвращает строку json, а не json-объект. Я просто хотел уточнить это. – Bhimsen

+0

Спасибо. Я понимаю, что использовать нагрузку просто необязательно. \t json.dumps (результат) дал мне то, что я хочу. Пришлось учиться больше! :) –

Смежные вопросы