wikipediaやグーグルで調べたり、公式ドキュメントを読んだりしましたが、まだJSONとは何か、なぜそれを使うのかを本当に理解するところまでは至っていません。
私はしばらくの間、PHP、MySQL、Javascript/HTMLを使用してアプリケーションを構築してきましたが、もしJSONが私の生活を楽にしたり、コードをより良くしたり、ユーザーインターフェースをより良くするために何かできるのであれば、それについて知りたいと思っています。誰か簡潔に説明してくれませんか?
JSON(JavaScript Object Notation)は、データ交換に使用される軽量なフォーマットである。MDNに記載]1されているように、一部のJavaScriptはJSONではなく、また一部のJSONはJavaScriptではありません。 これが使われる例としては、Webサービスのレスポンスがあります。 昔のWebサービスでは、データの送信にXMLを使用していましたが、JSONが登場してからは(※JSONフォーマットはDouglas CrockfordによるRFC 4627で規定されています)、より軽量**なフォーマットとして好まれるようになりました。 公式のJSON web siteには、より多くの情報が掲載されています。 JSONは2つの構造で成り立っています。
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
var x = {x:y}
は JSON ではなく Javascriptオブジェクト です。この2つは同じものではありません。JSONに相当するもの(Javascript言語で表現されたもの)は、var x = '{"x":"y"}'
となります。xは **string** 型のオブジェクトであり、それ自体がオブジェクトではありません。var x = JSON.parse('{"x":"y"}');
, x
はオブジェクトになりましたが、これはもうJSONではありません。
Javascript object Vs JSON](https://stackoverflow.com/questions/8294088/javascript-object-vs-json)を参照してください。JSONとJavaScriptを扱う場合、コールバックで返された結果を評価するためにeval
関数を使いたくなるかもしれませんが、JSONでは有効だがJavaScriptでは無効な2つの文字(U+2028 & U+2029)があるので、これはお勧めできません(詳しくはこちらをご覧ください)。
したがって、JSONを評価する前に、有効なJSONかどうかをチェックするCrockford'のスクリプトを常に使用するようにしなければなりません。 スクリプトの説明へのリンクはこちら、jsファイルへの直リンクです。最近の主要なブラウザは、このための独自の実装18を持っています。
JSONパーサーの使い方の例(上記のコードスニペットのjsonを使った場合)。
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
JSONパーサーには、もうひとつの非常に便利なメソッド、stringify
があります。 このメソッドは、JavaScriptオブジェクトをパラメータとして受け取り、JSON形式の文字列を出力します。 これは、データをサーバーに *送信したいときに便利です。
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
parse
とstringify
)は、2番目のパラメータも受け取ります。これは、最終結果のすべてのレベルで、すべてのキーと値に対して呼び出される関数で、それぞれの値は、入力した関数の結果で置き換えられます。 (これについてはこちらを参照してください。)
また、JSONはJavaScriptだけのものだと思っている人は、そうではないことを説明・確認しているこの記事をご覧ください。一般的な回答としては、AJAXを使用してデータを要求する場合、JSON文字列としてオブジェクトを簡単に送受信することができます。利用可能なJavascriptの拡張機能は、AJAXリクエストでサーバーにデータを送信するために、すべてのjavascriptタイプのtoJSON()コールをサポートしています。AJAXレスポンスは、単純なevalコールによってJavascriptオブジェクトに変換できるJSON文字列としてオブジェクトを返すことができます。例えば、AJAX関数someAjaxFunctionCallReturningJsonが以下のように返されたとします。
"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"
を返した場合、Javascriptで次のように書けます。
var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);
JSONはWebサービスのペイロードなどにも使えますが、AJAXの結果にはとても便利です。