Ich erhalte eine JSON-codierte Zeichenfolge von Obj-C und decodiere (vorerst) eine Dummy-Zeichenfolge wie den folgenden Code. Meine Ausgabe wird mit dem Zeichen 'u' ausgegeben, das jedem Element vorangestellt ist:
[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}...
Wie fügt JSON dieses Unicode-Zeichen hinzu? Was ist der beste Weg, um es zu entfernen?
mail_accounts = []
da = {}
try:
s = '[{"i":"imap.gmail.com","p":"aaaa"},{"i":"imap.aol.com","p":"bbbb"},{"i":"333imap.com","p":"ccccc"},{"i":"444ap.gmail.com","p":"ddddd"},{"i":"555imap.gmail.com","p":"eee"}]'
jdata = json.loads(s)
for d in jdata:
for key, value in d.iteritems():
if key not in da:
da[key] = value
else:
da = {}
da[key] = value
mail_accounts.append(da)
except Exception, err:
sys.stderr.write('Exception Error: %s' % str(err))
print mail_accounts
Antworten:
Das U-Präfix bedeutet nur, dass Sie eine Unicode-Zeichenfolge haben. Wenn Sie die Zeichenfolge wirklich verwenden, wird sie in Ihren Daten nicht angezeigt. Lassen Sie sich nicht von der gedruckten Ausgabe werfen.
Versuchen Sie zum Beispiel Folgendes:
Du wirst kein u sehen.
quelle
u
s in Ihren Daten. Ehrlich gesagt ist das Ausdrucken eineru
Zeichenfolge als Unicode-Zeichenfolge einer der schlimmsten Fehler bei Python. Äußerst lächerlich. Warum nichta
vor jeder Zeichenfolge eine drucken, wenn es sich um ASCII handelt? Undi
wenn es eine ganze Zahl ist?Alles ist cool, Mann. Das 'u' ist eine gute Sache, es zeigt an, dass die Zeichenfolge vom Typ Unicode in Python 2.x ist.
http://docs.python.org/2/howto/unicode.html#the-unicode-type
quelle
Der
d3
Druck unten ist derjenige, den Sie suchen (was die Kombination von Dumps und Ladungen ist) :)Mit:
Drucke:
quelle
json.dumps
konvertiert das Diktat zurück in eine (JSON-codierte) Zeichenfolge. Das wollte das OP nicht. -1.Das
u
Präfix bedeutet, dass diese Zeichenfolgen eher Unicode- als 8-Bit-Zeichenfolgen sind. Der beste Weg, um dasu
Präfix nicht anzuzeigen, besteht darin, zu Python 3 zu wechseln, wo Zeichenfolgen standardmäßig Unicode sind. Wenn dies keine Option ist,str
konvertiert der Konstruktor von Unicode in 8-Bit. Führen Sie daher einfach eine rekursive Schleife über das Ergebnis durch und konvertieren Sieunicode
instr
. Es ist jedoch wahrscheinlich am besten, die Zeichenfolgen einfach als Unicode zu belassen.quelle
Unicode ist hier ein geeigneter Typ. Die JSONDecoder-Dokumente beschreiben die Konvertierungstabelle und geben an, dass JSON-String-Objekte in Unicode-Objekte dekodiert werden
https://docs.python.org/2/library/json.html#encoders-and-decoders
"Die Codierung bestimmt die Codierung, die zum Interpretieren aller von dieser Instanz dekodierten str-Objekte verwendet wird (standardmäßig UTF-8)."
quelle
Diese an ein Objekt angehängten 'u'-Zeichen bedeuten, dass das Objekt in "Unicode" codiert ist.
Wenn Sie diese 'u'-Zeichen von Ihrem Objekt entfernen möchten, können Sie dies tun:
Lassen Sie uns aus der Python-Shell auschecken
quelle
Dieses Problem trat immer wieder auf, wenn ich versuchte, JSON-Daten im Protokoll mit der Python-
logging
Bibliothek zu Debugging- und Fehlerbehebungszwecken zu erfassen . Das Erhalten desu
Charakters ist ein echtes Ärgernis, wenn Sie den Text kopieren und irgendwo in Ihren Code einfügen möchten.Wie jeder Ihnen sagen wird, liegt dies daran, dass es sich um eine Unicode-Darstellung handelt und dass dies möglicherweise darauf zurückzuführen ist, dass Sie
json.loads()
die Daten ursprünglich aus einer Zeichenfolge geladen haben.Wenn Sie die JSON-Darstellung im Protokoll ohne
u
Präfix verwenden möchten , besteht der Trick darin, sie zu verwendenjson.dumps()
vor dem Abmelden verwenden. Beispielsweise:quelle
Versuche dies:
mail_accounts [0] .encode ("ascii")
quelle
Ersetzen Sie einfach das u 'durch ein einfaches Anführungszeichen ...
quelle