2016-03-22 10 views
0

Ich habe json_encode($array); verwendet, um ein Array zu einem JSON zu konvertieren.Wie ein PHP-Objekt in ein JavaScript-Objekt zu serialisieren (nicht JSON)

[{"x":1418736600,"y":"82.2"},{"x":1418736900,"y":"82.2"}] 

Aber was ich wirklich brauchen, ist ein JavaScript-Objekt wie folgt aus:

[{x:1418736600,y:"82.2"},{x:1418736900,y:"82.2"}] 

Um es kurz machen ich ohne Angabe der Schlüssel einen JSON möchte, aber es wäre besser, zu vermeiden Parsen was json_encode Ausgaben und stattdessen einen einfacheren Weg.

Ist es möglich, dies in PHP zu tun?

+9

Warum brauchen Sie das? Die Ausgabe von 'json_encode' ist perfekt * JavaScript * -Code, wenn Sie ihn dort verwenden, wo ein Wert erwartet wird. In JavaScript ist es durchaus zulässig, die Schlüssel in Anführungszeichen zu setzen. Es scheint unwahrscheinlich, dass die zitierten Schlüssel die Nutzlast so viel größer machen, dass das ein Problem ist. –

+0

Nur ein Hinweis: JSON ist auch gültig Javascript, da Javascript Objektliterale Schlüssel 'entweder zitiert oder nicht in Anführungszeichen (obwohl sie zitiert werden müssen, wenn sie nicht gültige Bezeichner sind). – Paulpro

+0

Schreiben Sie Ihren eigenen Javascript-Objektliteral * -Encoder, der ein modifizierter Ableger eines JSON-Encoders wäre. Praktisch gesprochen ist das absolut Unsinn, denn * JSON ist bereits Javascript *. – deceze

Antwort

6

Anders als die Nutzlast sehr geringfügig kleiner machen, ist es nicht notwendig, dies zu tun. Die Ausgabe von json_encode gilt JavaScript-Code, falls verwendet, wo ein Wert erwartet wird, z.B .:

var x = <?php echo json_encode($array); ?>; 

Die angegebenen Eigenschaftsschlüssel gelten JavaScript. JSON als Ganzes ist tatsächlich eine Teilmenge der JavaScript-Syntax.

Sie könnte einen regulären Ausdruck auf das Ergebnis werfen. Es kann wahrscheinlich niemals perfekt sein (JSON, wie HTML, kann nicht mit einem einzigen regulären Ausdruck korrekt analysiert werden), aber innerhalb einer begrenzten Domäne können Sie es möglicherweise tun. Zum Beispiel, hier ist eine naive Version, die wahrscheinlich für viele Datensätze funktionieren würde, auch Ihr Beispiel, es aber wieder würde nicht Arbeit mit allen Datensatz mit allen Mitteln:

<?php 
$str = json_encode($array); 
$str = preg_replace('/"([A-Za-z0-9_$]+)":/', '$1:', $str); 
?> 
var x = <?php echo json_encode($array); ?>; 

Das alles geht davon aus, dass nur besteht AZ, az, 0-9, _ oder $ zwischen doppelten Anführungszeichen gefolgt von einem Doppelpunkt ist ein Schlüssel und entfernt die Anführungszeichen. (Das ist keine vollständige Liste von gültigen JavaScript identifier characters, es ist nur ein Beispiel.)

Aber es scheint mir unwahrscheinlich, dass die Einsparungen die Mühe wert sind.

Um es richtig zu machen, müssten Sie natürlich Ihren eigenen Serializer machen. Es wäre nicht so schwer, nur eine rekursive Funktion, die in Arrays und Objekte absteigt. Es könnte immer noch json_encode für die Werte verwenden.