如何将JSON输出文件格式化为指定示例样式?
问题需求
需要将JSON输出格式化为以下样式:数组内每个对象单独占一行,对象内部键值对在同一行,数组元素带有缩进。示例如下:
[ {"keyA1": "value1", "keyA2": "value2", "KeyAN": "valueN"}, {"keyB1": "value1", "keyB2": "value2", "KeyBN": "valueN"}, {"keyC1": "value1", "keyC2": "value2", "KeyCN": "valueN"}, ]
当前使用Deno的JSON.stringify(members, null, 1)写入文件,无法满足需求,需调整代码实现目标格式。现有代码片段:
const newAdmin = { id: Math.floor(dateNow.getTime() / 1000), firstName: firstName, lastName: lastName, birthDate: new Date(birthDate).toLocaleDateString(), registrationDay: dateNow.toLocaleDateString() }; members.push(newAdmin); await Deno.writeFile(membersFilePath!, encoder.encode(JSON.stringify(members, null, 1)));
解决方案
JSON.stringify的默认缩进逻辑会把对象内部的键值对也拆分成多行,没法直接生成目标格式。可以手动拼接出符合要求的JSON字符串,步骤如下:
- 将数组里的每个对象单独转成无缩进的紧凑JSON字符串
- 给每个对象字符串添加2个空格的缩进
- 用
,\n作为分隔符拼接所有对象字符串 - 最后包裹上数组的首尾括号并添加对应换行
替换原有写入文件的代码为:
// 构建自定义格式的JSON字符串 const formattedJson = `[ ${members.map(item => JSON.stringify(item)).join(',\n ')} ]`; await Deno.writeFile(membersFilePath!, encoder.encode(formattedJson));
这样生成的JSON就完全匹配目标样式了。
内容的提问来源于stack exchange,提问作者Tinaira
相关产品推荐
相关产品推荐

