【问题标题】:How to parse and format strings out of irregular CSV in javascript?如何在javascript中解析和格式化不规则CSV中的字符串?
【发布时间】: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 将每个项目切成自己的字符串,删除模具,然后在空间上拆分每个字符串以获得树/草和数量...

标签: javascript node.js json csv


【解决方案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]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-23
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        • 2021-01-24
        相关资源
        最近更新 更多