🐕

[Node.js]CSVの1つのセルの中でJSONデータをインデントをつけてわかりやすく表示する

2024/08/13に公開
exec.ts
import { createWriteStream } from "node:fs";

const dogs = [
  {
    breed: "セントバーナード",
    detail: {
      size: "大型",
      origin: "スイス",
      rescueAbility: 100,
    },
  },
  {
    breed: "プードル",
    detail: {
      size: "小型",
      origin: "フランス",
      hypoallergenic: true,
    },
  },
  {
    breed: "柴犬",
    detail: {
      size: "中型",
      origin: "日本",
      guardDog: {
        ability: "中",
        isLoyal: true,
      },
    },
  },
];

const TARGET_FILE = createWriteStream(`./犬種.csv`);
TARGET_FILE.write(`品種,詳細\n`);
for (const dog of dogs) {
  const detail = JSON.stringify(dog.detail, null, 2)
    .replace(/"/g, '""') // ダブルクォートをエスケープ
    .replace(/^{\n/, "") // 先頭の { と改行を削除
    .replace(/\n}$/, "") // 末尾の } と改行を削除
    .replace(/,\n/g, "\n") // カンマと改行をただの改行に
    .replace(/^\s{2}/gm, ""); // 各行の先頭のインデントを削除

  TARGET_FILE.write(`${dog.breed},"${detail}"\n`);
}
TARGET_FILE.end();

出力結果

犬種.csv
品種,詳細
セントバーナード,"""size"": ""大型""
""origin"": ""スイス""
""rescueAbility"": 100"
プードル,"""size"": ""小型""
""origin"": ""フランス""
""hypoallergenic"": true"
柴犬,"""size"": ""中型""
""origin"": ""日本""
""guardDog"": {
  ""ability"": ""中""
  ""isLoyal"": true
}"

Discussion