Frage

Ich habe ein JSON-Objekt in PHP erstellt, das JSON-Objekt enthält eine andere JSON-String entkam in einer seiner Zellen:

php > $insidejson = array('foo' => 'bar','foo1' => 'bar1');
php > $arr = array('a' => array('a1'=>json_encode($insidejson)));
php > echo json_encode($arr);
{"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}

Dann mit Python, ich versuche deocding es simplejson mit:

>>> import simplejson as json
>>> json.loads('{"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}')

Dies schlägt mit dem folgenden Fehler:

Traceback (most recent call last):
  File "", line 1, in ?
  File "build/bdist.linux-i686/egg/simplejson/__init__.py", line 307, in loads
  File "build/bdist.linux-i686/egg/simplejson/decoder.py", line 335, in decode
  File "build/bdist.linux-i686/egg/simplejson/decoder.py", line 351, in raw_decode
ValueError: Expecting , delimiter: line 1 column 14 (char 14)

Wie kann ich dieses JSON-Objekt in Python decodiert? Sowohl PHP und JS dekodieren es erfolgreich und ich nicht ändern kann es Struktur ist da, dass große Veränderungen in vielen verschiedenen Komponenten in verschiedenen Sprachen erfordern würde.

Danke!

War es hilfreich?

Lösung

Versuchen Sie die Zeichenfolge mit ‚r‘ prefixing es eine rohe Zeichenfolge zu machen:

# Python 2.6.2
>>> import json
>>> s = r'{"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}'
>>> json.loads(s)
{u'a': {u'a1': u'{"foo":"bar","foo1":"bar1"}'}}

Was sagt Alex unten ist wahr: Sie können nur die Schrägstriche verdoppeln. (Seine Antwort wurde nicht geschrieben, als ich mein gestartet.) Ich glaube, dass rohe Strings ist einfacher, wenn auch nur, weil es sich um eine Sprache-Funktion ist, die die gleiche Sache bedeutet, und es ist schwieriger, etwas falsch zu laufen.

Andere Tipps

Versuchen

Vielleicht simplejson ist zu viel "einfach".

Wenn Sie Schrägstriche in einen String einfügen wollen sie selbst müssen zu entkommen.

import simplejson as json
json.loads('{"a":{"a1":"{\\"foo\\":\\"bar\\",\\"foo1\\":\\"bar1\\"}"}}')

Ich habe es getestet und Python behandelt, dass die Eingabe nur in Ordnung - außer mir das json-Modul in der Standardbibliothek (import json, Python 3.1) enthält verwendet

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top