2016-10-03 40 views
1

我有一個類和一個循環中的數組。我正在填充對象並將其附加到數組。如何通過JSON將數組數據傳遞給Web端?我有一個錯誤,說JSON不可序列化。我如何序列化爲JSON?python json對象數組不可序列化

class myclass(object): 
    def __init__(self,vehicle,mng01): 
     self.vehicle = vehicle 
     self.vehicle = vehicle 

#--Main function-- 
@subApp.route('/jsontry', method=['POST']) 
def data(): 
    for x in list: 
     vehicle_sum.append(myclass(x,str(mng01)) 

    return json.dumps({'success':'1','vehicle':vehicle_sum}) 
+0

什麼是mng01你可以舉一個例子。 –

+0

你可以發佈錯誤堆棧嗎?當我嘗試轉儲'{'success':'1','vehicle':vehicle_sum}'時,'vehicle_sum'是一個標準的python數組,它可以工作。請提供有關錯誤和您使用的對象的更多詳細信息:) –

+1

@FloranGmehlin:它是'myclass'實例的列表。這不會開箱即用。看到我的回答如下:) – SuperSaiyan

回答

3

是不是說myclass對象不是JSON可串行化的?這是因爲json.dumps(..)無法知道如何對您的類進行JSON序列化。您需要填寫custom encoder to do that

下面是一個示例實現。我相信你可以修改你的用例。

import json 

class Temp(object): 
    def __init__(self, num): 
     self.num = num 

class CustomEncoder(json.JSONEncoder): 
    def default(self, obj): 
     if isinstance(obj, Temp): 
      return {"num": obj.num} 
     #Let the base class handle the problem. 
     return json.JSONEncoder.default(self, obj) 

obj = [Temp(42), Temp(42)] 


print json.dumps(obj, cls=CustomEncoder) 

#Output: [{"num": 42}, {"num": 42}] 

如果你不想過分複雜的東西,這裏是你可以做什麼:

all_vehicles = [{"vehicle": x.vehicle} for x in vehicle_sum] 
json.dumps({'success':'1','vehicle':all_vehicles) 
0

它不說,JSON是不是序列化的,它說,你的情況下, myclass不是JSON可序列化的。即它們不能被表示爲JSON,因爲它真的不清楚你期望的輸出。

要了解如何使一個類JSON序列化,檢查這個問題:How to make a class JSON serializable

在這種瑣碎的情況下,這取決於你想實現什麼,你可能會好與你的JSON插入[x.vehicle for x in vehicle_sum] 。如果您確實需要直接在JSON中插入實例數據,則必須編寫一個編碼器。