Попытка перебрать все записи в объекте хранилища данных и добавить номера записей в словарь

Я анализирую содержимое страницы в 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}
Другие вопросы по тегам