🐕
[Node.js]CSVの1つのセルの中でJSONデータをインデントをつけてわかりやすく表示する
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