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.
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.