Python словарь JSON - PullRequest
       1

Python словарь JSON

1 голос
/ 19 марта 2012

Я использую dict для создания объекта json, но у меня возникли некоторые проблемы с dict и json!

def get(self):

    players = db.GqlQuery("SELECT * FROM Player")

    playerInfo  = {}



    for player in players:
        email = player.email.encode("utf-8")
        gem =  str(player.gem)

        print email
        print gem

        playerInfo["email"] = email
        playerInfo["gem"] = gem


    b = json.dumps(playerInfo)

    self.response.out.write(b)

По какой-то причине я получил только один цикл for, а когда я печатал электронную почту в цикле for, я получил 6 результатов, но вывод playerInfo содержит только 1 набор данных.

{"email": "test1", "gem": "0"}

Мой ожидаемый результат должен быть

{"email": "test1", "gem": "0"},{"email": "test2", "gem": "2"}...

Ответы [ 4 ]

7 голосов
/ 19 марта 2012

То, что вы хотите, я думаю, это список словарей. Это позволит вам хранить несколько объектов:

players = db.GqlQuery("SELECT * FROM Player")

playerInfo  = []

for player in players:
    email = player.email.encode("utf-8")
    gem =  str(player.gem)

    playerInfo.append({"email" :email, "gem": gem})

b = json.dumps(playerInfo)

self.response.out.write(b)

Кроме того, вы действительно хотите избегать использования print в своих приложениях AppEngine. Вместо этого используйте ведение журнала, так как print может иметь непредвиденные побочные эффекты.

2 голосов
/ 19 марта 2012

Попробуйте вместо этого:

players = db.GqlQuery("SELECT * FROM Player")

playerInfo  = []

for player in players:
    player_dict = dict(
      email = player.email.encode("utf-8")
      gem =  str(player.gem)
    )

    playerInfo.append(player_dict)

b = json.dumps(playerInfo)

self.response.out.write(b)
0 голосов
/ 20 марта 2012

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

L = []
for player in players:
    L.append('{"email": "%s", "gem": "%s"}' % (player.email.encode("utf-8"), str(player.gem))
b = ','.join(L)

Только несколько игроков идут техническим путем.Больше игроков, подумайте о циклах процессора и уменьшите свои накладные расходы.Простите за любые опечатки выше.-stevep

0 голосов
/ 19 марта 2012

Вы много раз перезаписывали словарь.Попробуйте вместо этого :)

players = db.GqlQuery("SELECT * FROM Player")

player_list  = []



for player in players:
    email = player.email.encode("utf-8")
    gem =  str(player.gem)

    print email
    print gem

    playerInfo = {}

    playerInfo["email"] = email
    playerInfo["gem"] = gem
    player_list.append(playerInfo)


b = json.dumps(player_list)

self.response.out.write(b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...