如何在javascript中解析和格式化不规则CSV中的字符串?
Posted
技术标签:
【中文标题】如何在javascript中解析和格式化不规则CSV中的字符串?【英文标题】:How to parse and format strings out of irregular CSV in javascript? 【发布时间】:2021-04-05 16:17:03 【问题描述】:我从一个公共网站上抓取了这个过敏数据字符串:
Cedar 679 gr/m3 High, Grass 20 gr/m3 Medium, Trees 80 gr/m3 Medium, Molds Low.
有时项目的数量较少,但树木和草的一般格式总是这样,用逗号分隔每种类型的过敏原:
TYPE AMOUNT g/m3 LEVEL
模具是个例外;假设它总是一串文本。假设我们根本不需要模具数据。
您会使用什么库或技术将其解析为简洁的 JSON 对象,例如:
"Cedar": "679",
"Grass": "20",
"Trees": "80"
【问题讨论】:
你理想的数据集最终会是什么样子? 你检查npmjs.com/package/csv-parser了吗? 我想我可以使用 csv-parser 将每个项目切成自己的字符串,删除模具,然后在空间上拆分每个字符串以获得树/草和数量... 【参考方案1】:我之前在类似的情况下使用过“csvtojsn”模块,它帮助很大。 https://www.npmjs.com/package/csvtojson
【讨论】:
【参考方案2】:你应该试试csv-parse我在我当前的项目中使用它,它就像一个魅力。
【讨论】:
【参考方案3】:正如 Sam 在 cmets 中所说,最好使用 npmjs.com/package/csv-parser
但是,如果您想使用 vanilla JS,我编写了一个基本脚本,可以根据您的输入运行:
//function takes a csv string and returns a list of Objects
//and only includes values with 4 parts
function parseCsv(csvString)
let out = ;
let spacedValues = csvString.split(/,\s*/);
let values = spacedValues.map(str => str.split(" "));
values.forEach((value, index) =>
if (value.length === 4)
//you can change the value from an object to value[1] if you only need the amount
out[`$value[0]`] =
AllergenAmount: value[1],
AllergenUnits: value[2],
AllergenLevel: value[3]
);
// add an else if here if you want to keep values with more/less than 4 parts of the string
);
return out;
//wrapper that implements the builtin JSON.stringify method
const csvToJSONString = csvString => JSON.stringify(parseCsv(csvString));
要使用它,只需将 csv 字符串传递给csvToJSONString
函数,它就会返回一个 JSON 字符串。如果您只需要数量(在代码中注释),您还可以将属性从对象更改为 value[1]
。
【讨论】:
以上是关于如何在javascript中解析和格式化不规则CSV中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
Vue3-JavaScript如何使用vue3创建一个基于webstorm开发自动提示和自动格式化代码规则的工程!