Umgang mit fehlerhaften JSON in PHP

9

Ich versuche ein PHP-Skript zu schreiben, das Daten von einem Webservice verarbeitet, der "json" als String liefert. Das Problem ist die Zeichenfolge ist nicht wirklich Json; es ist Javascript. Insbesondere werden die Schlüssel nicht zitiert, obwohl die Variablen sind. Beispiel (die tatsächlichen Daten sind viel länger und komplizierter):

%Vor%

Wie im php-Handbuch beschrieben, kann json_decode () dies nicht richtig interpretieren Zeichenfolge.

Meine Frage ist, wie kann ich eine Zeichenfolge wie diese in PHP erfolgreich interpretieren?

Die einzige Lösung, die ich mir vorstellen kann, ist, einige reguläre Ausdrücke zu schreiben, die die Syntax korrigieren, aber dann hätte ich zwei Probleme.

BEARBEITEN

Hadvigs Vorschlag, das Birnenmodul Services_JSON zu verwenden, funktionierte und sieht wie eine allgemeine Lösung aus. Nachdem ich das Modul installiert hatte, sah mein Code wie folgt aus:

%Vor%

Leider ist das LANGSAM. Um die ganze Zeichenfolge (~ 400.000 Zeichen) zu interpretieren, wurde & gt; 36 Sekunden! Die Verwendung eines regulären Ausdrucks zum Korrigieren der Anführungszeichen und die anschließende Verwendung von json_decode dauerte ~ 0,04 Sekunden. Hier ist, was ich benutzt habe:

%Vor%

Dies wird natürlich brechen, wenn die Daten Anführungszeichen, Klammern oder Kommata enthalten.

    
Chris 26.07.2011, 21:00
quelle

5 Antworten

2

Ok. versuche das zu benutzen. Ссылка Ich überprüfe einfach deine Zeichenfolge

    
hadvig 27.07.2011, 13:14
quelle
1

Hängt davon ab, wie kompliziert Ihre Daten sind:

%Vor%

gibt zurück: Benutzerdefinierte Payload

    
Sparkup 26.07.2011 21:20
quelle
0

Wenn das Problem nur die nicht aufgezählten Bezeichner sind und angenommen wird, dass die Daten keine geschweiften Klammern enthalten, sollte dies Folgendes tun:

%Vor%

(nicht getestet!)

    
Rob Agar 26.07.2011 23:43
quelle
0

Versuchen Sie Folgendes:

%Vor%     
Zeigen 31.07.2013 10:42
quelle
0

Die Verwendung von regexp ist ein No-Go. JSON-Grammatik kann nicht korrekt mit regexp geparst werden. Sie werden sich für eine Menge zukünftiger Bugs öffnen.

Ich empfehle die Verwendung eines YAML-Parsers. YAML ist abwärtskompatibel zu JSON und erlaubt gleichzeitig nicht aufgelöste Literale.

Die Symfony YAML-Komponente hat mir sehr gut getan.

Und denken Sie daran, dass es im Vergleich zu json_decode eine Leistungseinbuße geben wird, da diese nativ implementiert ist.

    
pinkeen 17.10.2017 09:28
quelle

Tags und Links