2013-09-07 7 views
7

У меня есть некоторые трудности с созданием конкретного объекта JSON в python.JSON - Генерация json в цикле в python

мне это нужно, чтобы быть в следующем формате:

[ 
    {"id":0 , "attributeName_1":"value" , "attributeName_2":"value" , .... }, 
    {"id":1 , "attributeName_2":"value" , "attributeName_3":"value" , .... }, 
    . 
    . 
    . 
] 

В питона, им получать идентификаторы, attributeNames и значения от 2-х объектов. Im пытается генерировать JSON как это:

data=[] 
    for feature in features_selected: 
     data.append({"id":feature.pk}) 
     for attribute in attributes_selected: 
      if attribute.feature == feature: 
       data.append({attribute.attribute.name : attribute.value}) 
     jsonData=json.dumps(data) 

, но я получил этот результат, который не является именно то, что мне нужно:

[ 
    {"id":0} , {"attributeName_1":"value"} , {"attributeName_2":"value"} , 
    {"id":1} , {"attributeName_2":"value"} , {"attributeName_3":"value"} , .... }, 
    . 
    . 
    . 
] 

ответ

14

Проблема заключается в том, что вы добавлении к data несколько раз в цикле : сначала {"id":feature.pk}, затем {attribute.attribute.name : attribute.value} во внутреннем цикле.

Вместо этого вам нужно определить словарь внутри цикла, наполнить его id пункта и атрибуты, и только потом добавить:

data=[] 
for feature in features_selected: 
    item = {"id": feature.pk} 
    for attribute in attributes_selected: 
     if attribute.feature == feature: 
      item[attribute.attribute.name] = attribute.value 
    data.append(item) 

jsonData=json.dumps(data) 
Смежные вопросы