【问题标题】:Change JSON content field type using Node.js使用 Node.js 更改 JSON 内容字段类型
【发布时间】:2019-10-11 11:54:44
【问题描述】:

我使用第三方爬虫工具从网站上爬取了一些内容,爬取后我成功获取了.json文件。我的jsoncontent 如下图所示:

  {
   "name": "Mi Band 3 (Black)",
   "price": "₹ 1,899.00",
   "rating_count": "22,438",
   "MRP": "₹ 2,199.00",
   "saved_amount": "₹ 300.00 (14%)"
  }

爬取了很多这样的产品,你可以看到priceMRPrating_countString类型的,我想改成数字类型,也想遍历price,rating_count, & MRP 字段删除不需要的字符。我想我可以使用Node.js 来做到这一点,但我是脚本语言的新手,包括Node.js,在检查了一些Node.js 基础知识后,我已经使用下面的代码从.json 文件中读取了内容,并且工作了

var fs = require('fs');

 fs.readFile('run_results.json','utf8', function (err, data) {
     if (err) throw err;
     console.log('Data here =>', data);
 });

但是当我搜索时我找不到任何特定的解决方案,请提供一些提示以完成我的任务,谢谢。

【问题讨论】:

  • 实际上,一旦你得到数据中的东西,它只是字符串操作,只是把它当作字符串来玩。
  • 首先需要将 JSON 转为对象:const obj = JSON.parse(data);。现在您可以更改其内容:obj.rating_count = parseInt(obj.rating_count)
  • 你不能在"₹ 1,899.00"上使用parseIntparseInt("₹ 1,899.00")NaN。首先从字符串中删除除小数点以外的所有非数字

标签: node.js json web-crawler


【解决方案1】:

您可以将转换函数作为参数传递给JSON.parse,以将数字字符串转换为数字:

var fs = require('fs');

var numericKeys = ["price", "rating_count", "MRP"];

fs.readFile('run_results.json','utf8', function (err, data) {
  if (err) throw err;
  var results = JSON.parse(data, function(key, value) {
    return (numericKeys.indexOf(key) !== -1)
      ? parseFloat(value.replace(/[^0-9.]/g, ''))
      : value;
  });

  console.log(results);
});

【讨论】:

    【解决方案2】:

    我想你有一个对象数组

    const extractNumber = value => parseFloat(value.replace(/[^0-9.]/g, '')); // replace all symbols except number and decimal point, then parse it to int
    
    const items = JSON.parse(data);
    
    const result = items.map(item => ({
      ...item,
      price: extractNumber(item.price),
      rating_count: extractNumber(item.rating_count),
      MRP: extractNumber(item.MRP)
    }));
    

    【讨论】:

    • 这是一个对象;对象没有.map()
    • 如果它是一个对象,只需对其应用地图回调
    • 你不懂。您的代码创建了一个错误:items.map is not a function Only arrays have a .map() method,但 data is an Object.
    • 我的代码不可运行,这是如何映射问题中描述的对象集合的示例
    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2016-12-07
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多