6.3 JSONのパースと文字列化

JavaScript のプログラムの中では、サーバーから受け取った「JSON 形式の文字列」を「JavaScript のオブジェクト」に変換したり、その逆を行ったりする操作が頻繁に行われます。

この時に使用する命令が JSON.parse() と JSON.stringify() です。

JSON.parse()

JSON のパース(解析)を行います。受け取った文字列を、プログラムで扱えるオブジェクトに変換します。

JSON.stringify()

JavaScript のオブジェクトを JSON 形式の文字列に変換します。

6.3.1 JSON 形式の変換操作を行うプログラム

JSON 形式の文字列をオブジェクトに変換して、データを取り出してみましょう。

ソースフォルダ:public/ch06

ファイル名:json.js

➢ json.html

前の章で作った ch06/object.html をコピーし、ch06 にペーストしてください。
その際に、ファイル名を json.html に変更します。
ファイル内の object.html や object.js の記述も、json.html や json.js に修正します。

➢ json.js

// json.js

// 1. サーバーから届いたと想定される「JSON形式の文字列」です
// ※キーがダブルクオートで囲まれている点に注目してください
const jsonString = '{ "bookId": 101, "title": "JS基礎テキスト", "price": 2500 }';

// 2. 文字列を「JavaScriptオブジェクト」に変換(パース)します
const bookObj = JSON.parse(jsonString);

// 3. オブジェクトになったので、ドット(.)でデータを取り出せます
alert(`書籍タイトル: ${bookObj.title}`);
alert(`価格: ${bookObj.price}円`);

// 4. 逆に、オブジェクトを文字列に戻して確認します
const backToString = JSON.stringify(bookObj);
alert(`JSON文字列に戻した結果: \n${backToString}`);

実行結果

解説

5 行目で、サーバーから届いたと想定される「JSON 形式の文字列」を const jsonString で定義しています。キーがダブルクオートで囲まれている点に注目してください。

5: const jsonString = '{ "bookId": 101, "title": "JS 基礎テキスト", "price": 2500 }';

8 行目では JSON.parse を使って bookObj という新しい変数に jsonString をパースした結果を代入しています。この操作により bookObj は、jsonString に定義されたキーと値をもつ JavaScript のオブジェクトに変換されます。

8: const bookObj = JSON.parse(jsonString);

オブジェクトになった後は、bookObj のプロパティから、ドット(.)キーを使って値を取り出せるようになります。11 行目と 12 行目では、title と price というキーのプロパティから bookObj.title と bookObj.price でアクセスして値を取り出し、その結果を alert で表示しています。

11: alert(`書籍タイトル: ${bookObj.title}`);
12: alert(`価格: ${bookObj.price}円`);

15 行目で JSON.stringify を使って、新しく定義した backToString に bookObj を再び「JSON 形式の文字列」に戻して代入する処理を行っています。16~17 行目の表示結果では、最初に定義した jsonString と同じ文字列が alert の中に表示されているのが確認できます。

15: const backToString = JSON.stringify(bookObj);
16: alert(`JSON 文字列に戻した結果: ¥n${backToString}`);

このように JSON.parse() を使うことで、魔法のように文字列が「オブジェクト(便利な箱)」に変わります。オブジェクトに変換された後は、オブジェクトのルールに従って個別のデータ(タイトルや価格)を自由に取り出せるようになります。逆に JSON.stringify() は、データをネットワーク上で送信する直前に、より軽量で通信に有利な特性を持つ「JSON 形式の文字列」にパッキングするような操作だと考えると分かりやすいでしょう。