では「再帰を使った実用的な JSON 処理」の例を見てみましょう。実際の開発では、API から受け取った JSON データを解析して「すべてのキーを取り出す」「特定の値を探す」といった処理がよくあります。こうした入れ子構造は再帰が得意です。
例1:JSONのすべてのキーを取り出す
function collectKeys(obj, keys = []) {
for (const key in obj) {
keys.push(key);
if (typeof obj[key] === "object" && obj[key] !== null) {
collectKeys(obj[key], keys); // 再帰で潜る
}
}
return keys;
}
const data = {
user: {
name: "Alice",
address: {
city: "Tokyo",
zip: "100-0001"
}
},
active: true
};
console.log(collectKeys(data));
// ["user", "name", "address", "city", "zip", "active"]
JavaScript👉 ネストがどれだけ深くても「オブジェクトなら再帰で潜る」だけで処理できる。
例2:特定の値を探す
function findValue(obj, target) {
for (const key in obj) {
if (obj[key] === target) return true;
if (typeof obj[key] === "object" && obj[key] !== null) {
if (findValue(obj[key], target)) return true;
}
}
return false;
}
console.log(findValue(data, "Tokyo")); // true
console.log(findValue(data, "Osaka")); // false
JavaScript👉 ネストの深さを気にせず「値が見つかるまで潜る」ことができる。
✅ ポイント
- JSON は「入れ子構造(ツリー構造)」なので再帰が自然にフィットする。
- ループだけで書こうとすると「スタックやキューを自分で管理」する必要があり、コードが複雑になる。
- 再帰なら「オブジェクトなら潜る」というルールだけでシンプルに書ける。
👉 ここまでで「再帰の実用例」をファイル構造や配列から JSON に広げられました。
次は「再帰を使ったツリー構造の変換(例: JSONをHTMLリストに変換)」をやってみると、さらに実務的な応用が見えてきます。


