
はじめに
JavaScriptでJSONデータを作成して、便利に扱って来ましたが、改めて考えてまともに勉強してこなかったので、備忘録メモを作成してみました。
1. JSONとは?
JSON(ジェイソン)は JavaScript Object Notation の略で、
「データの保存ややりとりに適した軽量な構造」です。
✅ 特徴
- キーと値のペアで構成される
- 人にも機械にも読みやすい
- JavaScriptとの相性が抜群
🔍 書き方の基本(オブジェクト形式)
{
"title": "PROGRAMMING",
"names": ["lain", "ChatGPT"]
}
🔍 書き方の基本(配列形式)
[
{ "title": "GRAPHIC", "names": ["Stable Diffusion", "ChatGPT"] },
{ "title": "VOICE", "names": ["VOICEVOX"] }
]
💡 よくある用途
- サイト設定ファイル(config.json)
- 多言語化(lang_ja.json, lang_en.json)
- ゲームのシナリオやエンディングの構成
2. 基本の使い方(stringifyとparse)
JavaScriptでは、オブジェクトをJSON形式に変換したり、その逆を行うために、次の2つの関数がよく使われます。
🔄 JSON.stringify()
オブジェクトや配列をJSON文字列に変換します。
const obj = { title: "PROGRAMMING", names: ["lain", "ChatGPT"] };
const jsonStr = JSON.stringify(obj);
console.log(jsonStr);
// → "{"title":"PROGRAMMING","names":["lain","ChatGPT"]}"
✅ よくある用途
デバッグログに出力する
localStorage に保存する
サーバーへデータ送信する際に使う
🔃 JSON.parse()
JSON文字列をJavaScriptのオブジェクトや配列に変換します。
const jsonStr = ‘{“title”:“GRAPHIC”,“names”:[“ChatGPT”]}’; const obj = JSON.parse(jsonStr); console.log(obj.title); // → GRAPHIC
✅ 注意点
parse() は文字列が正しいJSON形式でないとエラーになります。
文字列の " や , の位置ミスによく注意!
💡 ワンポイント:ログ出力の罠
console.log("data: " + {}); // → "data: [object Object]"
console.log("data:", {}); // ✅ 構造表示される
console.log(JSON.stringify({}, null, 2)); // ✅ 整形して見やすく出力
3. fetchでJSONを読み込む方法
Webアプリでは、サーバーから設定ファイルやデータを非同期で読み込む場面がよくあります。
JavaScriptでは fetch() を使うことで、簡単にJSONファイルを取得できます。
🔰 基本形
const response = await fetch("/assets/data/sample.json");
const data = await response.json();
console.log(data);
- /assets/data/sample.json は相対パス。プロジェクト構成に応じて調整
- await を使うためには、関数を async にする必要があります
async function loadData() {
const response = await fetch("/assets/data/sample.json");
const data = await response.json();
console.log("読み込んだデータ:", data);
}
⚠ エラーになりやすいポイント
原因 | 症状 | 解決策 |
---|---|---|
ファイルパスの間違い | 404 Not Found |
パスを Networkタブ で確認 |
.json() を呼ばない |
Response オブジェクトのまま |
.json() でパースを忘れずに |
await を付け忘れる |
Promise が表示される |
必ず await を付ける |
非同期関数でない | await が使えないエラー |
async function にする |
実例:エンディングメッセージを読み込む
async function loadEndingData() {
const res = await fetch("/assets/data/ending.json");
const json = await res.json();
json.forEach(({ title, names }) => {
const block = `<span class="ending-title">${title}</span><br>${names.join("<br>")}`;
document.querySelector("#credits").innerHTML += `<p>${block}</p>`;
});
}
4. JSONデータの使い方
読み込んだJSONデータは、JavaScriptの配列やオブジェクトとして扱えます。
ここでは forEach() や map() を使って、データをループ処理しながらHTMLに出力する方法を紹介します。
🔁 forEachでループして出力する
const data = [
{ title: "PROGRAMMING", names: ["lain", "ChatGPT"] },
{ title: "VOICE", names: ["VOICEVOX"] }
];
data.forEach(({ title, names }) => {
const block = `<span class="ending-title">${title}</span><br>${names.join("<br>")}`;
document.querySelector("#credits").innerHTML += `<p>${block}</p>`;
});
🪄 mapを使ってまとめてHTMLに変換する
const htmlBlocks = data.map(({ title, names }) => {
return `<p><span class="ending-title">${title}</span><br>${names.join("<br>")}</p>`;
});
document.querySelector("#credits").innerHTML = htmlBlocks.join("");
💡 innerHTMLの注意点
- += を繰り返すとパフォーマンスが悪くなる場合もあります
- textContent と違い、HTMLタグとして解釈されます
- innerHTML に直接ユーザー入力を入れると XSS脆弱性 の原因になるので注意
5. よくあるエラーと対処法
❌ [object Object] が表示される
const obj = { title: "TEST" };
console.log("data: " + obj); // → "data: [object Object]"
✅ 対処法
- console.log(“data:”, obj); で構造を見やすく出力
- JSON.stringify(obj) を使えば文字列に変換して確認できる
❌ undefined になる
console.log(GameSettings.edData); // ← 非同期でまだ読み込まれていない可能性
✅ 対処法
- await GameSettings.load(); で読み込み完了を待ってから使う
- 非同期処理のタイミングを意識する
❌ Promise とだけ表示される
const data = fetch("sample.json");
console.log(data); // → Promise { <pending> }
✅ 対処法
- await を忘れていないかチェック
- または .then() を使ってコールバックで取得する
❌ JSON.parse()でエラーが出る
const str = '{title: "TEST"}';
const obj = JSON.parse(str); // → Uncaught SyntaxError
✅ 対処法
- JSONのキー・値は必ずダブルクオートで囲む
- “title”: “TEST” のように正しく書く
これで基本的な使い方とハマりやすい落とし穴をカバーできました。
次は応用編として「6. JSON活用術(設定ファイル・多言語・データ連携)」を紹介することもできます。
6. JSON活用術(設定ファイル・多言語・データ連携)
ここでは、実際の開発現場でよく使われる JSONの活用パターンを紹介します。
特に設定の外部化や言語切り替え、ユーザーデータとの連携などに便利です。
🔧 設定ファイルとして使う
アプリの設定値をコードにハードコーディングせず、外部の .json ファイルで管理できます。
📁 例:config.json
{
"theme": "dark",
"volume": 0.8,
"language": "ja"
}
const config = await (await fetch("/assets/data/config.json")).json();
document.body.classList.add(config.theme);
🌍 多言語対応(i18n)
JSONを使えば、言語ごとのラベルやテキストをまとめて管理できます。
📁 lang_ja.json
{
"title": "ゲーム開始",
"settings": "設定",
"exit": "終了"
}
const lang = await (await fetch("/assets/data/lang_ja.json")).json();
document.getElementById("btn-start").textContent = lang.title;
✅ 複数の言語ファイルを切り替えるだけで、インターフェース全体を翻訳できます。
🎮 ゲームのデータ定義に使う
たとえば、エンディングスタッフロールやステージ情報などもJSONで持っておけば、柔軟に管理できます。
📁 ending.json
[
{ "title": "PROGRAMMING", "names": ["lain", "ChatGPT"] },
{ "title": "BGM", "names": ["ゆうり", "しゃろう"] }
]
const edData = await (await fetch("/assets/data/ending.json")).json();
edData.forEach(({ title, names }) => {
const html = `<span class="ending-title">${title}</span><br>${names.join("<br>")}`;
document.querySelector("#credits").innerHTML += `<p>${html}</p>`;
});
💾 ローカル保存・ユーザー設定にも使える
localStorage と組み合わせて、ユーザーの選択や設定を保存することも可能です。
// 保存
const settings = { bgm: true, volume: 0.7 };
localStorage.setItem("userSettings", JSON.stringify(settings));
// 読み込み
const saved = JSON.parse(localStorage.getItem("userSettings"));
console.log(saved.volume); // → 0.7
これらの応用例を知っておくだけで、開発の柔軟性と効率が大きく変わります。
7. まとめ:JSONを味方につける
JSONは「ただのデータ形式」ではなく、JavaScriptと組み合わせることで、
設定・翻訳・ステージ構成・UI表示など、アプリの構造そのものを外部化・再利用可能にする力を持っています。
✅ この記事で学んだこと
- JSON.stringify() や JSON.parse() の基本
- fetch() を使った非同期読み込み
- 配列・オブジェクトをループしてHTMLに表示
- よくあるエラー([object Object]、非同期処理、構文ミス)
- 実践的な活用法(設定、i18n、localStorage連携)
💬 ひとことアドバイス
JSONに慣れるということは、「コードの柔軟性が増す」=「開発者としての自由度が広がる」 ということ。
書き方に迷ったら JSON.stringify() と console.log() で中身を見てみる。それだけでも、世界が変わります。
今後の実装やゲーム制作、Webアプリ開発でも、JSONの力をどんどん活かしていきましょう。
💬 コメント