如何在javascript中解析和格式化不规则CSV中的字符串



我从一个公共网站上抓取了这个过敏数据字符串:

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"
}

正如Sam在评论中所说,最好使用npmjs.com/package/csv-parser

然而,如果你想使用vanillaJS,我写了一个基本的脚本,可以根据你的输入工作:

//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]

我曾与"csvtojsn";模块之前在类似的情况下,它帮助很大。https://www.npmjs.com/package/csvtojson

你应该尝试csv解析我在当前项目中使用它,它的工作原理很有魅力。

最新更新