2011-01-22 3 views
1

PHPでは、json_encodeを使用してオブジェクトをjson文字列としてエンコードできます。JSONは「正式に」ネイティブタイプの変換をサポートしていますか?

$string = json_encode($some_object); 

しかし、PHPは、あなたがjson_encodeに文字列を渡す場合、オブジェクト(int型、文字列など)を考慮されていないデータ型の標準スルーを持っている、これは可能性がjavascriptのステートメントを含む文字列を返します。文字列を定義するために使用されます。それほど厄介なフレージングで

、この(ジャバスクリプト準備文字列)

"Hello \n\tworld, please don't \"misuse quote'sor possessive apostrophes' " 

この

echo json_encode("Hello 
world, please don't " . '"' . "misuse quote's for emphasis " . "or possessive apostrophes' "); 

意志出力はJSONの仕様のこの動作部分ですか?つまり、JSONは、インプリメンテーションでネイティブの非オブジェクト型データ型の変換を処理する方法を定義または推奨していますか?あるいは、コンバージョンについての意見もありますか?私の読書of the RFCはこれをあいまいにしていましたが、私はこれらのことを解釈するのには駄目です。

私はこの動作が将来のバージョンの機能から消滅する可能性があるので、私は尋ねます。すなわち、どこかの仕様書に成文化されている場合、開発中に追加すると考えられる人物よりも消滅する可能性は低いです。

答えて

3

JSONはネイティブタイプをまったく気にしません。プログラミング言語が使用/理解できるタイプにJSONがどのように変換されるかは、JSONライブラリまたは機能の開発者次第です。

1

あなたは正しくアランですが、この問題ではRFCが十分に明確ではありません。あなたはそれが導入の第二段落に述べて提供RFCへのリンクを一方

、:

JSONは、4つのプリミティブ型(文字列、数値、ブール値、およびnull)を表すことができ、 2つの構造化タイプ(オブジェクトと配列)。

しかし、一方で、あなたは段落に続けたときに、実際のJSONの文法についての協議、それは言うこと:

A JSONテキストは、シリアライズされたオブジェクトまたは配列です。
JSONテキスト=オブジェクト/配列

だから、文法に基づいて、あなたは'a string'が有効なJSONテキストを修飾しないと言うことができます。

個人的には、 JSON-text = valueという文法を「固定」して、false/null/true/object/array/number/stringのいずれかを有効なJSON-textにすることを好むでしょう。

今のところ厳格にしたいのなら、私は文法のセマンティクスに行きます。

私はこの質問へのリンクをDouglas Crockfordに送信します。多分彼はいくつかの有用な情報を追加できます。

+0

Heh、私は確かにDougが彼のフォーマットに満足しているとは思いますが、情報+1のため、ありがとう! –

+0

私は彼のために多くの敬意を払っていますが、結局RFCは彼を「Change Controller」として挙げているので、変更が可能であることを意味すると思います。 – epeleg

関連する問題