2016-07-07 15 views
1

Ich habe ein Objekt (oder String? Ich bin mir nicht sicher ..) in meiner MySQL-Datenbank, und ich möchte es wieder in Python-Wörterbuch in Ansichten zu drehen und dann verarbeiten und dann zurück senden zu HTML.json.loads funktioniert nicht in django

so hier ist mein Code in views.py:

{0: {u'loc ': [1, 2], u'pts

def measure_detail(request, measurement_id): 

     _ClickedPts = ClickedPts.objects.get(measurement=measurement_id) 

     _ClickedPts = json.loads(_ClickedPts) 

     return render(request, 'measurement_detail.html', {'measurement': _measurement, 'clicked_pts': _ClickedPts}) 

_clickedPts wie folgt aussieht '[: 456.45631334215614, 1155.23758883418], [1087.2590986710893, 1175.6156203824098]],'im' Maß ': (3264, 2448)}, 9: {u'loc': [1, 2], u'pts ': [[838.4383679397915 , 1183.738210969312], [1751.0879501479042, 1179.0747927841176]], u'imsize ': (3264, 2448)}, 28: {u'loc': [1, 2], u'pts ': [[1544.854017880959, 1041.081669022464], [ 2262.6099907645976, 1044.953878976804]], u'imsize ': (3264, 2448)}, 14: { u'loc ': [1, 2], u'pts': [[1122.5721676687076, 1211.5634319190933], [2053.740361759838, 1221.0344281491446]], u'imsize ': (3264, 2448)}, 15: {u'loc': [1, 2], u'pts ': [[1037,1904375418785, 1166,702956796377], [1959,451782586886, 1190,2974020603272]], u'imsize': (3264, 2448)}}

+0

Was Ihre DB ist? Woher hast du das? Sieht so aus? Wenn Sie eine '.get()' -Abfrage von Manager ausführen, erhalten Sie eine Objektinstanz der 'ClickedPts'-Klasse, keine Zeichenfolge oder ein dict oder json, weshalb Sie die' .loads() '-Funktion nicht anwenden können. – Gocht

+0

Welcher Typ ist '_clickedPts'? _clickedPts-sieht ähnlich aus - das sieht wie ein Python-Wörterbuch aus. Aber Sie können keine Python-Wörterbücher aus dem django-db bekommen. – Daniel

+0

@Gocht Ich habe mysql verwendet, und ich habe die _clickedPts oben aus einer anderen allgemeinen Python-Datei, wo ich mit meiner Datenbank verbinden und es bekommen. Wenn es eine Instanz ist, wie soll ich es in ein Python-Wörterbuch ändern? – KKlalala

Antwort

0

Der folgende Code funktioniert:

test = ClickedPts.objects.values('pts') 

test = test[0]['pts'] 

test = ast.literal_eval(test) 

#print type(test) 
#print test 
1

Ihre Zeichenfolge ist keine richtige JSON-Zeichenfolge und sieht tatsächlich wie ein Python-JSON-Objekt aus. Mit ast.literal_eval wäre es besser, diese Zeichenfolge in ein Python-JSON-Objekt zu konvertieren. Rufen Sie einfach as.literal_val (_ClickedPts) anstatt json.loads (_ClickedPts) auf, um zu bekommen, was Sie wollen.

https://docs.python.org/2/library/ast.html#ast.literal_eval

+0

Ich habe versucht, was Sie sagten, aber immer noch nicht funktioniert. – KKlalala