2016-10-03 12 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-serializeする方法を知る方法がないためです。 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で[x.vehicle for x in vehicle_sum]を挿入すると良いかもしれません、この些細な場合How to make a class JSON serializable

:この質問をチェックし、直列化可能クラスJSONを作成する方法を見つけるために

。インスタンスデータを直接JSONに直接挿入する必要がある場合は、エンコーダを作成する必要があります。

関連する問題