2017-01-25 121 views
0

我通過一些對象試圖環和某些屬性添加到一個數組被送回作爲JSON給視圖:Python3:遍歷對象和屬性添加到陣列或對象

data = {} 
camera_logs = CameraLog.objects.filter(camera_id=camera_id) 
for log in camera_logs : 
    setattr(data, 'celsius', log.celsius) 
    setattr(data, 'fahrenheit', log.fahrenheit) 

return JsonResponse(data) 

我對於Python來說相當新穎,所以我不確定我是否在正確的軌道上。

回答

1

訪問Python字典比使用setattr容易得多。 你有兩種選擇。您可以創建一個ID爲Keys的字典或簡單的列表。

import json 

data = {} 
camera_logs = CameraLog.objects.filter(camera_id=camera_id) 
for log in camera_logs : 
    data[log.id] = log.celsius 

return Response(json.dumps(data)) 

在上面的解決方案中,您將擁有一個ID爲CameraLog的字典作爲KEY,並且值爲您將擁有攝氏度。基本上,你的JSON看起來就像這樣:

{ 
    1: 20, 
    2: 19, 
    3: 21 
} 

第二種方法是發送值的簡單列表,但我猜你想有信息,有什麼相機什麼溫度

import json 

data = [] 
camera_logs = CameraLog.objects.filter(camera_id=camera_id) 
for log in camera_logs : 
    data.append(log.celsius) 

return Response(json.dumps(data)) 

編輯答案

如果你想有類型的字典列表,讓這樣的事情:

import json 

data = [] 
camera_logs = CameraLog.objects.filter(camera_id=camera_id) 
for log in camera_logs : 
    data.append({ 
     'camera_id': log.id, 
     'celsius': log.celsius, 
     'fahrenheit': log.fahrenheit 
    }) 

return Response(json.dumps(data)) 
+0

非常有幫助。我發現我並不完全偏離軌道。現在,我如何將'log'的多個屬性添加到'data'對象? – dcolumbus

+0

我得到'Decimal'類型的對象不是JSON serializable'作爲迴應 – dcolumbus

+0

我已經更新了我的答案。如果你有十進制不是JSON序列化你必須使用例如simplejson - 這與十進制很好。因爲python json有十進制字段的麻煩。比你可以簡單地將'simplejson導入爲json'並像上面那樣使用它 – sebb

0

您可以通過僅使用.values_list從查詢集中選擇所需的屬性來增強查詢。

import json 

camera_logs = CameraLog.objects.filter(camera_id=camera_id).values_list(
    'celsius', 'fahrenheit') 
data = [{"celcius": cel, "fahrenheit": fahr} for cel, fahr in camera_logs] 
return Response(json.dumps(data))