2016-03-30 11 views
0

私はPythonには新しく、オブジェクト(これはポイントの配列だと思う)をJSONに変換しようとしています。Python:ポイントの配列をJSON

print "myobject type is: %s" % type(myobject) 
print "myobject[0] is %s" % myobject[0] 
myobjectJson = json.dumps(myobject) 

myobject type is: class 'dlib.dlib.points' 

myobject[0] is (190, 254) 

Traceback (most recent call last): 
    File "./face_landmark_detection.py", line 103, in <module> 
    myobjectJson = json.dumps(myobject) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in dumps 
    return _default_encoder.encode(obj) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode 
    return _iterencode(o, 0) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: <dlib.dlib.points object at 0x1086db650> is not JSON serializable 

結果

ので、私の知る限り、このオブジェクトはJSONシリアライズ可能ではありません。

私が使用しようとしました:

myobjectJson = json.dumps(myobject, default=list) 
myobjectJson = json.dumps(myobject, default=tuple) 
myobjectJson = json.dumps(myobject, default=dict) 
myobjectJson = json.dumps(myobject, default=__dict__) 
myobjectJson = json.dumps(myobject, default=lambda o: o.__dict__) 

をしかし、私は同じエラーを得続ける... 私は何ができるのでしょうか?えっ、

import json 
myobjectJson = json.dumps([list(x) for x in myobject])  

ないタプルのリスト:

myobjectはタプルのリストであると仮定すると、あなたに

更新

dir myobject is: ['__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__getstate__', '__hash__', '__init__', '__instance_size__', '__iter__', '__len__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__safe_for_unpickling__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append', 'clear', 'extend', 'resize'] 
dir myobject[0] is: ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getstate__', '__hash__', '__init__', '__instance_size__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__safe_for_unpickling__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x', 'y'] 
+1

最終的にどのような構造になっていますか?現時点ではタプルのリストに似たものがあります。キーはありません。 – jDo

+0

返信いただきありがとうございます。このタプルのリストをそのままJSON文字列に出力したいと思います。 JSONに変換できる別の配列に変換することもできます。何も問題はありません。この出力を正しいJSON形式で出力するだけです。 – MeV

+0

JSONはリストのリストをサポートしています(または配列の配列は正しい用語かもしれません)。私はそれがあなたが今持っているものに最も近いと思います。 – jDo

答えて

1

ありがとうございましたか!試してみてください。この場合、

myobjectJson = json.dumps([list[p.x, p.y] for p in myobject]) 

または

myobjectJson = json.dumps([(p.x, p.y) for p in myobject]) 

を、あなたはjson.dumps()にリストを供給し、結果は同じでなければなりませんので、あなたはタプルのリストを作成するかどうかのデータを変更する必要はありませんまたはリストのリスト。

+0

ありがとう、私はこのエラーが発生します:TypeError: 'ポイント'オブジェクトは反復可能ではありません。信じられないほどの....なぜ単純なタスクは、これはPythonで複雑ですか? – MeV

+0

これは、タプルの正規リストではありません。 * 'myobject'と' point'は何ですか? 'dir(myobject [0])'をチェックし、出力を投稿してください。 'point'は独自の' .values() 'や' to_string() 'クラスメソッドを持っているかもしれません。 – jDo

+0

質問を2つの出力で更新しました。 .valuesやto_stringはどれも見ることができません。 – MeV