Попытка перебрать все записи в объекте хранилища данных и добавить номера записей в словарь
Я анализирую содержимое страницы в JSON и делаю это, просматривая каждый пост объекта хранилища данных, который возвращается после запроса. Но мой цикл проходит только одну итерацию, прежде чем вернуть значение.
Код для этого:
self.response.headers['Content-Type'] = 'application/json'
#Getting all the entries of the page
posts = db.GqlQuery("SELECT * FROM Blog ORDER BY time_created DESC")
logging.info("Number of posts=" + str(posts.count()) )
#Looping through them all to get the JSON text
for post in posts:
json_data = {
'post' : {
'subject': post.subject,
'content': post.blog,
'day' : post.day_created.strftime('%d %b %Y')
}
}
json_text = json.dumps(json_data)
self.write('{"allposts":'+json_text+'}')
Как вы можете видеть, цикл должен проходить по всем постам, я включил строку регистрации, чтобы проверить количество постов в объекте, и она возвращает количество постов, присутствующих.
вход будет объектом хранилища данных как таковой: <google.appengine.ext.db.GqlQuery object at 0x0427FD90>
Содержит 3 объекта: subject
, blog
а также day_created
Предполагается, что выходные данные этой функции будут объектами JSON с постами, упорядоченными так:
{
'allposts:'
{'post1':
{
'subject' : ' ... ',
'content': ' ... ' ,
'day' : ' .. '
}
,
....
,
'postn' :
{
....
}
}
1 ответ
На каждой итерации вы перезаписываете json_text
с
json_text = json.dumps(json_data)
Вы можете объединить результаты, как это
json_text += json.dumps(json_data)
Что касается чата, ваше требование немного отличается. Итак, что-то вроде этого будет работать для вас
for index, post in enumerate(posts, 1):
json_data["post{}".format(index)] = {
'subject': post.subject,
'content': post.blog,
'day' : post.day_created.strftime('%d %b %Y')
}
print {"allposts": json_data}