Seite 1 von 1

simplejson ohne Unicode

Verfasst: Montag 28. Januar 2008, 21:13
von zed leppelin
Hallo,

wenn ich Daten, die JSON-formatiert sind an ein Python-Script übergebe und diese mit der Methode loads(daten) in Python-Datentypen umwandele, sind alle Zeichenketten Unicode-Strings. Z.B.

Code: Alles auswählen

>>>import simplejson
>>>a = simplejson.loads(daten)
>>>a
{u'id': u'0', u'name': u'tief'}

Das macht aber in meiner weiteren Verarbeitung Probleme. Deshalb meine Frage:

Kann man simplejson dazu bewegen Zeichenketten als 'normale' Strings auszugeben, sodass mein Dictionary am Ende so aussieht:

Code: Alles auswählen

{'id': '0', 'name': 'tief'}
Vielen Dank für Tipps.

Zed

Verfasst: Montag 28. Januar 2008, 21:45
von Leonidas
Du kannst die Unicode-Daten auch in ein Byte-Encoding enkodieren, wo ist das Problem?

Verfasst: Montag 28. Januar 2008, 21:53
von zed leppelin
Na, das Problem ist, dass ich sie erst enkodieren muss. Wenn ich simplejson dazu bewegen könnte, nicht in Unicode zu wandeln, bliebe mir das erspart.

Geht das also nicht?

Verfasst: Montag 28. Januar 2008, 22:29
von mitsuhiko
zed leppelin hat geschrieben:Na, das Problem ist, dass ich sie erst enkodieren muss. Wenn ich simplejson dazu bewegen könnte, nicht in Unicode zu wandeln, bliebe mir das erspart.
JSON ist allerdings genauso wie XML Encodinglos.
Geht das also nicht?
Natürlich nicht.

Verfasst: Montag 28. Januar 2008, 23:21
von zed leppelin
JSON ist allerdings genauso wie XML Encodinglos.
Ja klar. Aber mein Problem ist ja nicht JSON sondern das Modul simplejson. Wenn das JSON einliest, wandelt es alle Strings nach Unicode.
Andere JSON-Module für Python machen das nicht (z.B. json-py).

Ich habe aber aus guten Gründen simplejson gewählt. Und jetzt bräuchte ich, dass es nicht nach Unicode wandelt.
Natürlich nicht.
Wieso??

Verfasst: Dienstag 29. Januar 2008, 00:20
von mitsuhiko
zed leppelin hat geschrieben:Ja klar. Aber mein Problem ist ja nicht JSON sondern das Modul simplejson. Wenn das JSON einliest, wandelt es alle Strings nach Unicode.
Andere JSON-Module für Python machen das nicht (z.B. json-py).
Dann ist das aber auch kein gültiges JSON. Es sei denn sie konveriteren in utf-8 oder irgendsowas um.
Natürlich nicht.
Wieso??
Weil JSON auf Unicode Ebene arbeitet und nicht auf Bytestrings. Gleich wie XML.

Re: simplejson ohne Unicode

Verfasst: Dienstag 29. Januar 2008, 09:22
von mkesper
zed leppelin hat geschrieben:wenn ich Daten, die JSON-formatiert sind an ein Python-Script übergebe und diese mit der Methode loads(daten) in Python-Datentypen umwandele, sind alle Zeichenketten Unicode-Strings. Z.B.

Code: Alles auswählen

>>>import simplejson
>>>a = simplejson.loads(daten)
>>>a
{u'id': u'0', u'name': u'tief'}

Das macht aber in meiner weiteren Verarbeitung Probleme.
Ich vermute, daß deine weitere Verarbeitung ein Problem hat. Was versuchst du denn, zu tun?

Verfasst: Dienstag 29. Januar 2008, 09:46
von zed leppelin
Also das geht nun wirklich an meinem Problem vorbei.

Nochmal: Ich habe einen JSON-String, der sieht so aus:

Code: Alles auswählen

'{"id': "0", "name": "tief"}'
Wenn ich die Methode loads() aus simplejson verwende wird daraus:

Code: Alles auswählen

>>>import simplejson
>>>a = simplejson.loads(daten)
>>>a
{u'id': u'0', u'name': u'tief'}
Also - wie erwartet - ein Dictionary, in dem aber alle Zeichenketten zu Unicode-Strings gewandelt sind.

Verwende ich das Modul json-py sieht es aber so aus:

Code: Alles auswählen

>>>import json
>>>a = json.read(daten)
>>>a
{'id': '0', 'name': 'tief'}
Wieder das erwartete Dictionary, aber mit 'einfachen' Strings.
(in beiden Fällen enthält daten natürlich den JSON-String.

Meine Frage war und ist, ob ich simplejson dazu bringen kann, die Unicode-Dekodierung sein zu lassen.

Dann müsste ich nicht zwei Parser verwenden.

Verfasst: Dienstag 29. Januar 2008, 10:15
von gerold
Hallo zed leppelin!

Ziel sollte es sein, innerhalb des Programms mit Unicode zu arbeiten und nur beim Einlesen und beim Speichern der Daten diese in ein definiertes Encoding zu bringen. Und genau das macht *simplejson*.

*simplejson* verhält sich somit zukunfssicher. Wenn du nicht mit Unicode klar kommst, dann verwende es nicht.

mfg
Gerold
:-)

Verfasst: Dienstag 29. Januar 2008, 10:33
von veers
Ich verstehe dein Problem damit nicht recht - versuchst du binäre Daten da rein zu encodieren?

Verfasst: Dienstag 29. Januar 2008, 11:04
von zed leppelin
Die Frage ist nun wirklich klar und eindeutig gestellt.

Wer simplejson oder json-py nicht kennt, braucht auch nicht zu antworten.
Wer es kennt, kann doch antworten: 'Es geht nicht' oder 'Es geht so und so'
Ziel sollte es sein, innerhalb des Programms mit Unicode zu arbeiten und nur beim Einlesen und beim Speichern der Daten diese in ein definiertes Encoding zu bringen. Und genau das macht *simplejson*.

*simplejson* verhält sich somit zukunfssicher. Wenn du nicht mit Unicode klar kommst, dann verwende es nicht.
Es gibt vielleicht einfache und gute Gründe, warum nicht mit Unicode gearbeitet wird. Und die muss ich hier auch nicht kundtun. Schließlich will ich das Forum nicht zuspammen.

Nochmal: Die Problemstellung ist meiner Ansicht nach sehr klar beschrieben.
Wenn also jemand simplejson wirklich kennt und mir Auskunft geben kann, wäre ich wirklich dankbar.

Beiträge, die nicht wirklich auf die eigentliche Fragestellung eingehen nerven (auch alle Mitlesenden).

Verfasst: Dienstag 29. Januar 2008, 11:14
von mkesper
zed leppelin hat geschrieben:Wer simplejson oder json-py nicht kennt, braucht auch nicht zu antworten.
Wer es kennt, kann doch antworten: 'Es geht nicht' oder 'Es geht so und so'
zed leppelin hat geschrieben:Geht das also nicht?
mitsuhiko hat geschrieben: Natürlich nicht.
Damit dürfte alles gesagt sein. Thread bitte schließen.

Verfasst: Dienstag 29. Januar 2008, 11:23
von gerold
zed leppelin hat geschrieben:
Ziel sollte es sein, innerhalb des Programms mit Unicode zu arbeiten und nur beim Einlesen und beim Speichern der Daten diese in ein definiertes Encoding zu bringen. Und genau das macht *simplejson*.

*simplejson* verhält sich somit zukunfssicher. Wenn du nicht mit Unicode klar kommst, dann verwende es nicht.
Hallo zed leppelin!

Die Antwort war "Wenn du nicht mit Unicode klar kommst, dann verwende es nicht." Damit meinte ich SimpleJSON.

Und für alle Anderen: Schreibt lieber euer Programm um. So dass es JSON richtig interpretiert und intern mit Unicode arbeitet und verbannt JSON-Module, die euch nicht dabei helfen.
zed leppelin hat geschrieben:Beiträge, die nicht wirklich auf die eigentliche Fragestellung eingehen nerven (auch alle Mitlesenden).
Andere Mitleser lernen aus unseren Kommentaren: So wie du es machst ist es nicht ideal und sie sollten es möglichst nicht so wie du machen.

mfg
Gerold
:-)

Verfasst: Dienstag 29. Januar 2008, 12:34
von BlackJack
Was macht json-py denn bei Daten die etwas ausserhalb von ASCII enthalten? Werden dann wenigstens Unicode-Objekte *dafür* zurück gegeben? Wenn nicht, dann ist das Modul IMHO fehlerhaft.

Du könntest vielleicht eine Funktion für das `object_hook`-Argument von `simplejson.loads()` schreiben, die die Umwandlung von Unicode in Zeichenkette übernimmt.