simplejson ohne Unicode

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
zed leppelin
User
Beiträge: 16
Registriert: Dienstag 29. Oktober 2002, 15:04
Wohnort: Berlin

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
--
this is zed
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du kannst die Unicode-Daten auch in ein Byte-Encoding enkodieren, wo ist das Problem?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
zed leppelin
User
Beiträge: 16
Registriert: Dienstag 29. Oktober 2002, 15:04
Wohnort: Berlin

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?
--
this is zed
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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.
TUFKAB – the user formerly known as blackbird
zed leppelin
User
Beiträge: 16
Registriert: Dienstag 29. Oktober 2002, 15:04
Wohnort: Berlin

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??
--
this is zed
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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?
zed leppelin
User
Beiträge: 16
Registriert: Dienstag 29. Oktober 2002, 15:04
Wohnort: Berlin

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.
--
this is zed
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Ich verstehe dein Problem damit nicht recht - versuchst du binäre Daten da rein zu encodieren?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
zed leppelin
User
Beiträge: 16
Registriert: Dienstag 29. Oktober 2002, 15:04
Wohnort: Berlin

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).
--
this is zed
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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.
Antworten