2015-11-22 4 views
-1

У меня есть набор запросов, который возвращает строку json после преобразованного списка.django python: как сделать json из django queryset

[{"pid": 1, "loc": "KL", "sid": 1, "sd": "south-1"}, 
{"pid": 1, "loc": "KL", "sid": 2, "sd": "north-5"},  
{"pid": 1, "loc": "KL", "sid": 3, "sd": "west-3"} 
] 

Я пробовал много вариантов Serializer, но не знают, как сделать выше, как:

[{"pid": 1, 
    "s": [{"sid": 1, "sd": "south-1", 
     "sid": 2, "sd": "north-5", 
     "sid": 3, "sd": "west-3" 
     }] 
}] 

ответ

2

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

[{"pid": 1, 
    "s": [{"sid": 1, "sd": "south-1"}, 
     {"sid": 2, "sd": "north-5"}, 
     {"sid": 3, "sd": "west-3"} 
     ], 
    "loc": "KL" 
}] 

т.е. s должен быть список словарей, а не один ДИКТ (и сталкивающиеся ключей). Я добавил "loc": "KL", так как похоже, что он отсутствует.

Предполагая, что каждый запрос возвращает только один и тот же pid и loc, вы можете создать s как список с каждым sid и sd в исходном запросе:

>>> q = ... # as above 
>>> r = {"pid": q[0]["pid"], "loc": q[0]["loc"]} # since pid and loc are always the same 
>>> r["s"] = [{"sid": x["sid"], "sd": x["sd"]} for x in q] 
>>> print r 
[{'pid': 1, 
    's': [{'sid': 1, 'sd': 'south-1'}, 
     {'sid': 2, 'sd': 'north-5'}, 
     {'sid': 3, 'sd': 'west-3'} 
     ], 
    'loc': 'KL' 
}] 
>>> print json.dumps(r) # gives the output as a json string 
+0

Уважаемый анероида, работает, как ожидалось, но проблема в том, что требуется слишком много времени для обработки 1-миллианских записей из таблицы mysql. – sen