2016-03-30 2 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__) 

Но я получаю ту же ошибку ... что я могу сделать?

Спасибо

обновление

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

Предполагая, что myobject список кортежей:

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

Не список кортежей, а? Попробуйте:

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: объект «point» не является итерируемым. Невероятно .... почему простая задача в этом сложна в Python? – MeV

+0

Хорошо, тогда это не обычный список кортежей. Что такое * 'myobject' и' point'? Проверьте 'dir (myobject [0])' и опубликуйте вывод. 'point' может иметь собственные методы' .values ​​() 'или' to_string() 'class. – jDo

+0

Я обновил вопрос с помощью двух выходов. Я не могу видеть .values ​​или to_string ни в одном из них. – MeV

Смежные вопросы