如何修改JavaScript代码实现JSON转无引号包裹的CSV?
问题
我用以下JavaScript代码将JSON数据转换为CSV:
function executeScript(event) { var json = event.getParameter("jsondata"); var fields = Object.keys(json[0]); var replacer = function(key, value) { return value === null ? '' : value }; var csv = json.map(function(row){ return fields.map(function(fieldName){ return JSON.stringify(row[fieldName], replacer) }).join('|'); }) csv.unshift(fields.join('|')); // 添加表头 csv = csv.join('\r\n'); event.log(csv); }
现在得到的输出是:
Username|Identifier|First name|Last name "booker12"|"9012"|"Rachel"|"Booker" "grey07"|"2070"|"Laura"|"Grey" "johnson81"|"4848"|"Craig"|"Johnson" "jenkins46"|"9346"|"Mary"|"Jenkins" "smith79"|"5079"|"Jamie"|"Smith"
但我需要的输出是去掉值周围的双引号:
Username|Identifier|First name|Last name booker12|9012|Rachel|Booker grey07|2070|Laura|Grey johnson81|4848|Craig|Johnson jenkins46|9346|Mary|Jenkins smith79|5079|Jamie|Smith
输入的JSON数据如下:
[{ "Username": "booker12", "Identifier": "9012", "First name": "Rachel", "Last name": "Booker" }, { "Username": "grey07", "Identifier": "2070", "First name": "Laura", "Last name": "Grey" }, { "Username": "johnson81", "Identifier": "4848", "First name": "Craig", "Last name": "Johnson" }, { "Username": "jenkins46", "Identifier": "9346", "First name": "Mary", "Last name": "Jenkins" }, { "Username": "smith79", "Identifier": "5079", "First name": "Jamie", "Last name": "Smith" }]
请问怎么修改代码才能得到不带双引号的CSV输出?
解决方案
问题根源是你使用了JSON.stringify()方法,它会自动给字符串类型的值添加双引号。只需要直接返回字段值,同时保留null值的处理逻辑即可。修改后的代码如下:
function executeScript(event) { var json = event.getParameter("jsondata"); var fields = Object.keys(json[0]); var replacer = function(value) { return value === null ? '' : value }; var csv = json.map(function(row){ return fields.map(function(fieldName){ return replacer(row[fieldName]) }).join('|'); }) csv.unshift(fields.join('|')); // 添加表头 csv = csv.join('\r\n'); event.log(csv); }
修改说明
- 移除
JSON.stringify()调用,直接返回经过处理的字段值 - 简化
replacer函数,无需处理key参数,直接判断值是否为null即可 - 处理后的字段值会以原始字符串/数值形式加入CSV,不会附加双引号
内容的提问来源于stack exchange,提问作者Neha Parmar
相关产品推荐
相关产品推荐

