2016-03-30 11 views
0

Ich bin neu in Python und ich versuche seit heute Morgen, ein Objekt (das glaube ich, es ist ein Array von Punkten) zu JSON zu konvertieren.Python: Array von Punkten zu JSON

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

Ergebnis

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 

so, soweit ich das Objekt sehen kann, ist nicht JSON serialisiert.

Ich habe zu verwenden versucht:

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__) 

Aber ich immer wieder die gleichen Fehler immer ... , was kann ich tun?

Danke

Update

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

Mit welcher Struktur hofften Sie, am Ende zu sein? Sie haben im Moment etwas, das einer Liste von Tupeln ähnelt; Es hat keine Schlüssel. – jDo

+0

Vielen Dank für die Antwort. Ich möchte diese Liste von Tupeln, wie es ist, zu einer JSON-Zeichenfolge ausdrucken. oder vielleicht zu einem anderen Array, das ich in JSON konvertieren kann. Alles ist in Ordnung, ich brauche nur diese Ausgabe in einem korrekten JSON-Format zu drucken – MeV

+0

JSON unterstützt Listen von Listen (oder Arrays von Arrays könnte der richtige Begriff sein). Ich schätze, das ist dem, was du jetzt hast, am nächsten. – jDo

Antwort

1

Unter der Annahme, dass myobject eine Liste von Tupeln ist:

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

keine Liste von Tupeln, nicht wahr? Versuchen:

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

oder

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

In diesem Fall füttern Sie die Liste json.dumps() und müssen nicht um die Daten zu ändern, so sollte das Ergebnis das gleiche sein, ob Sie eine Liste von Tupeln machen oder eine Liste von Listen.

+0

Danke, ich bekomme diesen Fehler: TypeError: 'Punkt' Objekt ist nicht iterierbar. Unglaublich .... warum ist eine einfache Aufgabe in Python so kompliziert? – MeV

+0

Ok, dann ist es keine reguläre Liste von Tupeln. Was * sind * mein Objekt und mein Punkt? Überprüfen Sie 'dir (myobject [0])' und geben Sie die Ausgabe ein. 'point' könnte eigene' .values ​​() 'oder' to_string() 'Klassenmethoden haben. – jDo

+0

Ich habe die Frage mit den 2 Ausgaben aktualisiert. Ich kann in keinem von ihnen Werte oder Zeichen sehen. – MeV