Oh MyUtils

JSON to CSV変換器 - JSON配列をCSVに変換 オンライン

JSON配列とCSV/TSV形式間で変換。ネストされたオブジェクトの平坦化、テーブルプレビュー、区切り文字カスタマイズ対応。

変換方向
区切り文字
配列
出力
入力
CSV/TSV結果
 

よくある質問

JSON to CSVコンバーターとは何ですか?

JSON to CSVコンバーターは、JSON(JavaScript Object Notation)データをCSV(カンマ区切り値)またはTSV(タブ区切り値)の表形式に変換したり、その逆を行うツールです。JSONはネストされたオブジェクトと配列としてデータを格納し、CSVは区切り文字で区切られた行と列でデータを表現します。開発者やデータアナリストは、APIレスポンスをスプレッドシートにエクスポートしたり、CSVデータをJSONベースのアプリケーションにインポートしたり、システム間でデータを移行する際に、これらの形式間の変換が頻繁に必要になります。

このJSON to CSVコンバーターの使い方は?

1. タブを使って変換方向を選択:JSON to CSVまたはCSV to JSON。2. 入力エリアにデータを貼り付けるか、ファイルをアップロード。3. 入力と同時にリアルタイムで自動変換されます。4. JSON to CSV:区切り文字とオプションを選択。5. CSV to JSON:区切り文字は自動検出されます。6. 出力パネルとプレビューテーブルで結果を確認。7. コピーまたはダウンロード。

データは安全ですか?サーバーに送信されますか?

データは100%安全で、ブラウザの外に出ることはありません。このコンバーターは完全にクライアントサイドのJavaScriptで実行されます。データはサーバーに送信されず、データベースに保存されず、どこにも記録されません。

コンバーターはネストされたJSONオブジェクトをどう処理しますか?

ネストされたJSONオブジェクトはドット記法の列ヘッダーを使ってフラット化されます。例えば、{"user": {"name": "Alice", "address": {"city": "Seoul"}}}はuser.nameとuser.address.cityという列を生成します。配列は2つの方法で処理できます:Stringifyモードは配列をセル内のJSON文字列に変換し、Expandモードは各配列要素に対して別の行を作成します。

このツールはどのようなCSV/TSV形式を生成しますか?

このツールはRFC 4180準拠のCSV出力を生成します。区切り文字、二重引用符、改行を含むフィールドは自動的に二重引用符で囲まれます。フィールド値内の二重引用符は二重にしてエスケープされます。最初の行にはデフォルトで列ヘッダーが含まれます。

JSONデータが配列でない場合はどうすればよいですか?

このコンバーターは入力としてJSONオブジェクト配列を期待します。入力が単一のJSONオブジェクトの場合、コンバーターは自動的に単一要素の配列にラップして変換します。

CSVをネストされたオブジェクトを持つJSONに変換するには?

CSVをJSONに変換する場合、コンバーターはデフォルトでフラットなJSONオブジェクト配列を生成します。型推論がサポートされています:数値文字列は数値に、true/falseはブール値に、nullはnullに変換されます。すべての値を文字列として保持するには、型自動検出オプションを無効にしてください。

コード例

// JSON Array to CSV Converter (Client-side, no dependencies)

function flattenObject(obj, prefix = "") {
  const result = {};
  for (const [key, value] of Object.entries(obj)) {
    const fullKey = prefix ? `${prefix}.${key}` : key;
    if (value !== null && typeof value === "object" && !Array.isArray(value)) {
      Object.assign(result, flattenObject(value, fullKey));
    } else {
      result[fullKey] = value;
    }
  }
  return result;
}

function escapeField(value, delimiter = ",") {
  if (value === null || value === undefined) return "";
  const str = typeof value === "object" ? JSON.stringify(value) : String(value);
  if (str.includes(delimiter) || str.includes('"') || str.includes("\n")) {
    return `"${str.replace(/"/g, '""')}"`;
  }
  return str;
}

function jsonToCsv(jsonArray, options = {}) {
  const { delimiter = ",", includeHeader = true, flatten = true } = options;
  const rows = flatten ? jsonArray.map(item => flattenObject(item)) : jsonArray;
  const headerSet = new Set();
  rows.forEach(row => Object.keys(row).forEach(key => headerSet.add(key)));
  const headers = Array.from(headerSet);
  const lines = [];
  if (includeHeader) {
    lines.push(headers.map(h => escapeField(h, delimiter)).join(delimiter));
  }
  for (const row of rows) {
    lines.push(headers.map(h => escapeField(row[h], delimiter)).join(delimiter));
  }
  return lines.join("\n");
}

// Example usage
const data = [
  { name: "Alice", age: 30, address: { city: "Seoul" } },
  { name: "Bob", age: 25, address: { city: "Tokyo" } }
];
console.log(jsonToCsv(data));
// name,age,address.city
// Alice,30,Seoul
// Bob,25,Tokyo

関連ツール