2016-05-07 9 views

Antwort

3

Wenn die Saiten sieht genauso aus wie Sie gebucht haben, können Sie einfache Anführungszeichen mit doppelten Anführungszeichen ersetzen, muss er in geschweiften Klammern und laden mit json.loads():

>>> import json 
>>> s = "'type': 'singlechoice',  'add_to_user_messages': false,  'text': 'See you tomorrow',  'next': '31'" 
>>> modified_s = '{' + s.replace("'", '"') + '}'                
>>> json.loads(modified_s) 
{u'text': u'See you tomorrow', u'type': u'singlechoice', u'add_to_user_messages': False, u'next': u'31'} 

Obwohl, ich bin nicht sicher, wo Sie Ihre Eingabe String kommt von und kann nicht garantieren, dass die Lösung alle möglichen Eingabezeichenfolgen abdecken würde.

Oder eine andere "schmutzige" Lösung false mit False, true mit True wäre zu ersetzen, schließen mit geschweiften Klammern und Last über ast.literal_eval():

>>> from ast import literal_eval 
>>> modified_s = s.replace("false", "False").replace("true", "True") 
>>> modified_s = '{' + s.replace("false", "False").replace("true", "True") + '}' 
>>> literal_eval(modified_s) 
{'text': 'See you tomorrow', 'type': 'singlechoice', 'add_to_user_messages': False, 'next': '31'} 
+0

Dank @alexce, dachte ich, dass b Das Problem besteht darin, dass die Zeichenfolge dynamisch generiert wird. Obwohl das Format immer gleich ist, kann ich die einfachen Anführungszeichen nicht einfach ersetzen, da Werte in den Schlüssel/Wert-Paaren in einigen Fällen auch einfache Anführungszeichen enthalten können. Wie kann ich mit diesem Problem umgehen? Irgendwelche Vorschläge? – abhinavDAIICT

+0

@abhinavDAIICT ja, wir können die erste Option verbessern, um die Anführungszeichen sicher zu behandeln. Könnten Sie zuerst prüfen, ob die zweite Option für Sie funktioniert? Vielen Dank. – alecxe

+0

Hallo @alexe, die zweite Option funktioniert fast und erzeugt das Wörterbuch, aber es gibt ein kleines Problem - Es ist zwingend zu ersetzen "wahr" mit "True" und das Wörterbuch erstellt, aber beim Überprüfen der JSON zeigt es einen Fehler. Eigentlich ist 'True' in JSON nicht gültig,' true' ist erlaubt. Sie können dies bei [http://jsoneditoronline.org] mit diesem generierten Wörterbuch verifizieren - '{'text': 'Danke Shreya :)', 'type': 'singlechoice', 'add_to_user_messages': True, 'weiter ':' 4 '} ' – abhinavDAIICT

0

Was dazu:

Das Hauptproblem wird falsch in Zeichenkette umgewandelt

a = "'type': 'singlechoice',  'add_to_user_messages': false,  'text': 'See you tomorrow',  'next': '31'" 

b = map(lambda x: x.split(":"), a.split(",")) 
c = map(lambda x: (x[0].replace("\'", "").strip(), x[1].replace("\'", "").strip()) , b) 
d = dict(c) 


print(d) 


#{'next': '31', 'type': 'singlechoice', 'text': 'See you tomorrow', 'add_to_user_messages': 'false'} 
Verwandte Themen