JSONは「公式に」ネイティブタイプの変換をサポートしていますか?
-
22-10-2019 - |
質問
PHPでは、使用できます json_encode
JSON文字列としてオブジェクトをエンコードします。
$string = json_encode($some_object);
ただし、PHPには、文字列を渡すと、オブジェクト(ints、文字列など)とは見なされない標準のデータ型があります。 json_encode
, 、これは、文字列の定義に使用できるJavaScriptステートメントを含む文字列を返します。
あまり厄介な言い回しで、これ
echo json_encode("Hello
world, please don't " . '"' . "misuse quote's for emphasis " . "or possessive apostrophes' ");
これを出力します(JavaScript Ready String)
"Hello \n\tworld, please don't \"misuse quote'sor possessive apostrophes' "
この動作はJSON仕様の一部ですか?つまり、JSONは、実装がネイティブ、非オブジェクト、データ型の変換をどのように処理するかを定義または推奨していますか?それとも、変換について意見を持っていますか?私の読書 RFCの これを曖昧なものとして残しましたが、私はこれらのことを解釈するのがくだらないです。
この動作が機能の将来のバージョンから消える可能性に興味があるので、私は尋ねます。 IEは、どこかで仕様で成文化されている場合、開発中に追加すると考えられていた誰かである場合よりも消える可能性が低くなります。
解決
JSONはネイティブタイプをまったく気にしません。プログラミング言語が使用/理解できるタイプとの間で、JSONライブラリまたは機能の開発者次第です。
他のヒント
あなたは正しいアランです、RFCはこの問題について十分に明確ではありません。
一方では、あなたが提供するRFCへのリンクで、はじめに次の2番目の段落に記載されています。
JSONは、4つの原始的なタイプ(文字列、数字、ブール膜、ヌル)と2つの構造化されたタイプ(オブジェクトと配列)を表すことができます。
しかし、一方で、実際のJSON文法について語る段落に続くと、次のように述べています。
JSONテキストは、シリアル化されたオブジェクトまたは配列です。
json-text = object / array
したがって、文法に基づいて、あなたはそれを言うことができます 'a string'
有効なjson-textとしての資格はありません。
個人的には、文法が「固定されている」のを見たいと思っていますJSON-text = value
したがって、いずれかを作ります false / null / true / object / array / number / string
有効なjson-textになります。
あなたが今のところ厳しくなりたいなら、私は文法の意味論を使って行きます。
ダグラス・クロックフォードにこの質問へのリンクを送信します。おそらく彼はいくつかの有用な情報を追加できます。