【GAS・JavaScript対応】JSON整形とは?実務で使えるJSONフォーマット変換完全ガイド
旅行中に現地の地図や時刻表を整理するように、プログラミングの世界でもデータを使いやすい形へ整える作業があります。 それが「JSON整形」です。
JSONを扱い始めた頃は「読み取れればOK」と思いがちですが、実務になると事情は変わります。 API連携、データ分析、スプレッドシート出力、BIツールへの連携など、さまざまな場面でデータを最適な形へ変換する必要があります。
この記事では、JSON整形の基本から実務レベルの活用方法まで、GAS(Google Apps Script)やJavaScriptのサンプルコードを交えながら詳しく解説します。
JSON整形とは?初心者向けにわかりやすく解説
JSON整形とは、JSONデータを目的に応じて加工し、扱いやすい形式へ変換することです。
簡単に言えば、
「使えるデータに仕上げる工程」
と考えると理解しやすいでしょう。
整形前のJSON
[
{ "name": "鈴木", "age": "30", "dept": "営業" },
{ "name": "田中", "age": "25", "dept": "開発" }
]
整形後のJSON
[
{ "name": "鈴木", "age": 30 },
{ "name": "田中", "age": 25 }
]
不要な項目を削除し、文字列だった年齢を数値へ変換しています。 このような処理がJSON整形の基本です。
JSON整形が必要になる理由
実際の開発現場では、取得したデータをそのまま利用できるケースは多くありません。
- API送信用の形式へ変換する
- スプレッドシートへ出力する
- 分析用データを作成する
- 不要な項目を削除する
- データ型を統一する
- システム間のデータ連携を行う
実務では以下の流れで処理されることがほとんどです。
入力 → 加工 → 出力
JSON整形はまさにこの「加工」の部分を担っています。
JSON整形の基本パターン5選
1. フィールド削減
必要な項目だけを取り出す方法です。
const result = data.map(obj => ({
name: obj.name,
age: Number(obj.age)
}));
不要な情報を削除することで処理速度や可読性が向上します。
2. キー名の変更(リネーム)
const result = data.map(obj => ({
userName: obj.name,
userAge: obj.age
}));
外部APIや他システムの仕様に合わせる際によく利用されます。
3. 型変換
const result = data.map(obj => ({
...obj,
age: Number(obj.age),
date: new Date(obj.date)
}));
実務で最も頻繁に登場するのが型変換です。 特に文字列から数値への変換は必須スキルと言えるでしょう。
4. フラット化
ネスト構造を浅くして扱いやすくします。
const flat = {
name: obj.name,
...obj.info
};
分析やCSV出力でよく利用されます。
5. ネスト化
const nested = {
name: obj.name,
info: {
age: obj.age,
dept: obj.dept
}
};
API送信用データ作成でよく利用されるテクニックです。
実務でよく使うJSON整形パターン
APIレスポンスの整形
const formatted = data.map(item => ({
id: item.user_id,
name: item.user_name,
age: Number(item.user_age)
}));
APIごとに命名規則が異なるため、統一フォーマットへ変換する場面は非常に多くあります。
スプレッドシート出力用データ作成
const headers = ["name", "age"];
const output = data.map(obj =>
headers.map(h => obj[h])
);
GASでは二次元配列への変換が定番です。
集計データ生成
const result = Object.entries(grouped).map(([key, value]) => ({
category: key,
total: value
}));
BIツールやレポート作成で頻繁に登場します。
条件付き整形
const result = data
.filter(obj => obj.age >= 30)
.map(obj => ({
name: obj.name,
age: obj.age
}));
必要なデータだけを抽出できるため、大規模データ処理で重宝します。
実務で使われるJSON整形パイプライン
現場では複数の変換処理を組み合わせて利用します。
JSON
↓ normalize
↓ filter
↓ transform
↓ group
↓ format
実際のコード例はこちらです。
const result = data
.map(normalize)
.filter(filterFn)
.map(transform)
.reduce(groupFn, {});
処理を段階的に分けることで保守性が大幅に向上します。
関数分離のベストプラクティス
const normalize = obj => ({
name: obj.name,
age: Number(obj.age)
});
const transform = obj => ({
...obj,
age2x: obj.age * 2
});
後から仕様変更が発生しても修正箇所を最小限にできます。
ネストJSON整形の実務テクニック
flattenで分析用データを作る
const flat = data.flatMap(parent =>
parent.children.map(child => ({
parentName: parent.name,
...child
}))
);
売上分析やアクセス解析データの作成でよく使われます。
ネストデータを集約する
const result = data.map(dept => ({
dept: dept.name,
total: dept.users.reduce((acc, u) => acc + u.sales, 0)
}));
部署別売上やカテゴリ別集計で活躍します。
JSONの出力形式を整形する方法
見やすいJSON表示
const pretty = JSON.stringify(obj, null, 2);
ログ確認やデバッグ作業で欠かせません。
CSV形式へ変換
const csv = data.map(obj =>
`${obj.name},${obj.age}`
).join("\n");
API送信用JSON生成
const payload = JSON.stringify({
users: result
});
GASで使えるJSON整形テンプレート
function jsonFormat() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
const headers = data[0];
const json = data.slice(1).map(row => {
let obj = {};
headers.forEach((h, i) => obj[h] = row[i]);
return obj;
});
const formatted = json
.map(obj => ({
name: obj["名前"],
age: Number(obj["年齢"])
}))
.filter(obj => obj.age >= 30);
const output = formatted.map(obj => [obj.name, obj.age]);
sheet.getRange(2, 1, output.length, 2).setValues(output);
}
スプレッドシートからJSON生成、整形、再出力まで一通り実装できる実務向けテンプレートです。
JSON整形でよくある失敗例
型変換を忘れる
"30"
文字列と数値は別物です。計算時のバグ原因になります。
undefinedエラー
obj.xxx
存在確認をせずに参照するとエラーの原因になります。
深すぎるネスト
a.b.c.d.e
コードが読みにくくなり、保守性も大幅に低下します。
まとめ|JSON整形はデータ活用の仕上げ工程
JSON整形は単なるデータ変換ではありません。
「目的に合わせてデータを最適化する技術」
GASやJavaScriptを使った開発では、API連携・データ加工・分析・レポート作成などあらゆる場面で登場します。
- 型を統一する
- 不要データを削除する
- キー名を整理する
- ネストを最適化する
- 出力先に合わせて整形する
JSONを「読む」段階から、「自在に整形する」段階へ進めると、実務で扱える案件の幅が一気に広がります。
まずはフィールド削減・型変換・フラット化の3つを習得し、GASやJavaScriptで実際に手を動かしながら経験を積んでいきましょう。







0 件のコメント:
コメントを投稿