如何在JavaScript中将行式JSON文本文件转换为标准合法JSON格式
逐行JSON文件转标准JSON/CSV的实现方案
你目前写的开头代码不符合需求,你要处理的每行是独立的JSON结构,不需要按空格拆分,应该直接对每行做JSON解析,具体实现步骤如下:
转换为标准JSON格式
你需要拆分换行后过滤空行,再逐行解析为JSON对象,最终得到标准的JSON数组,实现代码如下:
const standardJson = str.split('\n') // 过滤掉首尾空行、以及内容全为空白的行 .filter(line => line.trim()) // 逐行解析为JSON对象 .map(line => JSON.parse(line)); // 如果需要输出为格式化的JSON字符串,可以调用JSON.stringify const formattedJsonStr = JSON.stringify(standardJson, null, 2); console.log(formattedJsonStr);
输出的结果就是符合规范的JSON数组,你示例的内容转换后如下:
[ {"id":819827,"nm":"Razvilka","lat":55.591667,"lon":37.740833,"countryCode":"RU"}, {"id":524901,"nm":"Moscow","lat":55.752220,"lon":37.615555,"countryCode":"RU"}, {"id":1271881,"nm":"Firozpur","lat":27.799999,"lon":76.949997,"countryCode":"IN"} ]
转换为CSV格式
在解析得到标准JSON数组的基础上,提取表头和每行内容拼接即可得到CSV,实现代码如下:
// 先解析得到标准JSON数组 const dataList = str.split('\n') .filter(line => line.trim()) .map(line => JSON.parse(line)); // 提取表头:取第一个元素的所有键拼接为逗号分隔的字符串 const csvHeader = Object.keys(dataList[0]).join(','); // 提取内容行:每个元素的所有值拼接为逗号分隔的字符串 const csvRows = dataList.map(item => Object.values(item).join(',')); // 拼接表头和内容行得到完整CSV字符串 const csvStr = [csvHeader, ...csvRows].join('\n'); console.log(csvStr);
你示例的内容转换后得到的CSV如下:
id,nm,lat,lon,countryCode 819827,Razvilka,55.591667,37.740833,RU 524901,Moscow,55.75222,37.615555,RU 1271881,Firozpur,27.799999,76.949997,IN
- 注意:如果你的字段值中存在逗号、双引号、换行等特殊字符,需要给每个字段值外层包裹双引号,同时对值内部的双引号做转义处理,避免CSV格式错乱。
内容的提问来源于stack exchange,提问作者minu
相关产品推荐
相关产品推荐

