如何在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中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Unity 解析Json格式

Vue3-JavaScript如何使用vue3创建一个基于webstorm开发自动提示和自动格式化代码规则的工程!

围绕javascript json格式包装一个对象,如何获取角度来解析它

Javascript类型转换的规则实例解析

typescript和javascrpt代码检查

JSON 语法 数据格式