如何在Node.js中解析CSV中Python列表格式的字符串为数组?
解决Python生成的CSV列表在Node.js中JSON.parse报错的问题
问题原因
Python直接将列表写入CSV时,会生成Python风格的列表字符串(使用单引号),比如['47299', '8690901'],但JSON规范要求字符串必须用双引号,所以Node.js中用JSON.parse解析时会抛出语法错误。
方案一:从Python端修正(推荐)
直接在生成CSV时,将nace_codes序列化为标准JSON字符串,这样Node.js可以直接用JSON.parse解析。
修改Python代码:
- 导入
json模块 - 在写入CSV时,对
nace_codes使用json.dumps()转换为标准JSON格式
修改后的核心代码片段:
import json # 新增导入 # ... 其他代码不变 formatted_data = enterprise.to_json() # 对nace_codes进行JSON序列化,处理None的情况 nace_json = json.dumps(formatted_data['nace_codes']) if formatted_data['nace_codes'] else '[]' writer.writerow([ formatted_data['enterprise_number'], formatted_data['vat_number'], nace_json, # 替换原来的formatted_data['nace_codes'] formatted_data['tel'], formatted_data['mobile'], formatted_data['email'] ])
这样生成的CSV中,nace_codes列会是标准JSON数组格式,比如["47299", "8690901"],Node.js端无需额外处理即可正常解析。
方案二:Node.js端兼容处理(无法修改Python代码时使用)
如果不能修改Python生成逻辑,需要在Node.js中对Python风格的列表字符串进行转换,再解析为数组。
实现思路:
- 将字符串中的单引号替换为双引号
- 处理
None(Python的空值)为null或者空数组 - 再用
JSON.parse解析
修改后的Node.js代码片段:
parsedData.map((row, i) => { console.log(`${i} | ${row.enterprise_number}`); let nace_codes = []; if (row.nace_codes) { // 替换单引号为双引号,处理Python的None为null const formattedStr = row.nace_codes.replace(/'/g, '"').replace(/None/g, 'null'); try { nace_codes = JSON.parse(formattedStr); } catch (err) { console.warn(`解析第${i}行nace_codes失败:`, err); } } console.log('Parsed value: ', nace_codes); });
注意:这种方法依赖字符串格式的稳定性,如果Python生成的列表有特殊字符(比如包含单引号的字符串),可能需要额外处理,因此优先推荐方案一。
内容的提问来源于stack exchange,提问作者Thore
相关产品推荐
相关产品推荐

