У объекта 'str' нет атрибута '__dict__' - PullRequest
6 голосов
/ 21 сентября 2011

Я хочу сериализовать словарь в JSON на Python. У меня этот объект 'str' не имеет атрибута ' dict ' error. Вот мой код ...

from django.utils import simplejson

class Person(object):
    a = ""

person1 = Person()
person1.a = "111"

person2 = Person()
person2.a = "222"

list = {}
list["first"] = person1
list["second"] = person2

s = simplejson.dumps([p.__dict__ for p in list])

И исключение составляет;

Traceback (most recent call last):
  File "/base/data/home/apps/py-ide-online/2.352580383594527534/shell.py", line 380, in post
    exec(compiled_code, globals())
  File "<string>", line 17, in <module>
AttributeError: 'str' object has no attribute '__dict__'

Ответы [ 3 ]

7 голосов
/ 21 сентября 2011

Как насчет

s = simplejson.dumps([p.__dict__ for p in list.itervalues()])
4 голосов
/ 21 сентября 2011

Что, по вашему мнению, [p.__dict__ for p in list] делает?

Поскольку list - это не список, это словарь, for p in list перебирает ключевые значения словаря.Ключи - это струны.

Никогда не используйте имена типа list или dict для переменных.

И никогда не лгите о типе данных.Ваша переменная list является словарем.Назовите это «person_dict», и вы станете счастливее.

3 голосов
/ 21 сентября 2011

Вы используете словарь, а не список как ваш list, чтобы ваш код работал, вы должны изменить его на список, например

list = []
list.append(person1)
list.append(person2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...