2016-03-22 3 views
0

json_encode($array);を使用して配列をjsonに変換しました。PHPオブジェクトをJavaScriptオブジェクト(JSONではなく)にシリアル化する方法

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

しかし、私が本当に必要なことは、次のようなJavaScriptオブジェクトです:

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

それは短い私は、キーを引用せずにJSONをしたいと思いますが、それは何json_encodeを解析避けることが好ましいであろうようにするには代わりにより簡単な方法で出力することができます。

これはPHPで可能ですか?

+9

なぜこれが必要ですか? 'json_encode'の出力は、値が期待される場所で使用すると、完全に有効な* JavaScript *コードとなります。キーを引用符で囲むことは、JavaScriptで完全に有効です。引用されたキーがペイロードを大きくしすぎているとは考えにくいです。 –

+0

ちょうど注:Javascriptのオブジェクトリテラルキーは引用符で囲まれていても引用符で囲まれていなくても構わないので、JSONも有効なJavascriptです(有効な識別子でない場合は引用符で囲む必要があります)。 – Paulpro

+0

Javascriptオブジェクトのリテラル*エンコーダを作成します。これは、JSONエンコーダの変更されたオフショーです。実際には、JSONはすでにJavascript *であるため、これは絶対にナンセンスです。 – deceze

答えて

6

ペイロードを非常にわずかに小さくする以外は、を実行する必要はありません。 json_encodeの出力値が期待されている場合に使用すれば、有効なJavaScriptコードで、例えば:

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

は、引用されたプロパティキーは有効なJavaScriptです。 JSON全体は、実際には、JavaScriptリテラル構文のサブセットです。

結果に正規表現をスローすることができます。おそらく完璧ではないかもしれません(HTMLのようなJSONは単一の正規表現で正しく解析できません)が、限られたドメイン内ではそれを実行できる可能性があります。

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

だけで構成されて何かを前提としています。たとえば、ここで再び、それは任意の手段によってすべてのデータセットとない仕事でしょうが、おそらく、あなたの例を含む多くのデータセット、のために働くだろう素朴なバージョンがありますAZ、az、0-9、_、または$を二重引用符で囲んだ後、直後にコロンを付けるとキーとなり、引用符が削除されます。有効なJavaScript identifier charactersの完全なリストではありません。これは単なる例です。

しかし、節約が迷惑になることはありません。

正しく行うには、もちろん、独自のシリアライザを実行する必要があります。それはすべて難しいことではなく、配列やオブジェクトへの降下を処理する再帰関数です。値にはまだjson_encodeを使用できます。

関連する問題