я использую этот код, чтобы определить свой класс в GAE Python:simplejson + GAE сериализации объектов с именами полей
class Pair(db.Model):
find = db.StringProperty()
replace = db.StringProperty()
rule = db.StringProperty()
tags = db.StringListProperty()
created = db.DateTimeProperty()
updated = db.DateTimeProperty(auto_now=True)
Затем я использую этот код для сериализации объектов этого класса с simplejson:
class PairEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Pair):
return [str(obj.created), str(obj.updated), obj.find, obj.replace, obj.tags, obj.rule]
Наконец я использую этот код для вывода результата в качестве ответа:
pairsquery = GqlQuery("SELECT * FROM Pair")
pairs = pairsquery.fetch(1000)
pairsList = []
for pair in pairs:
pairsList.append(json.dumps(pair, cls=PairEncoder))
serialized = json.dumps({
'pairs': pairsList,
'count': pairsquery.count()
})
self.response.out.write(serialized)
Вот результат выборки I получить:
{"count": 2, "pairs": ["[\"2010-12-06 12:32:48.140000\", \"2010-12-06 12:32:48.140000\", \"random string\", \"replacement\", [\"ort\", \"common\", \"movies\"], \"remove\"]", "[\"2010-12-06 12:37:07.765000\", \"2010-12-06 12:37:07.765000\", \"random string\", \"replacement\", [\"ort\", \"common\", \"movies\"], \"remove\"]"]}
Все вроде бы хорошо, за исключением одной вещи - мне нужно поля в ответ, чтобы иметь имена из класса Pair, так что не будет только значение, но имена соответствующих полей тоже , Как я могу это сделать?
Создайте dict для пары вместо json, кодирующей его. – kevpie 2010-12-06 12:54:23