脉冲云_梁兴臣

脉冲云_梁兴臣 查看完整档案

郑州编辑  |  填写毕业院校郑州脉冲软件科技有限公司  |  CTO 编辑 maichong.io 编辑
编辑

脉冲云CTO,JS全栈开发,DevOps实施,开发体验优化,开发效率提升

个人动态

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库052:sax,按流解析XML

NPM酷库,每天两分钟,了解一个流行NPM库。·

在NPM酷库051中,我们学习了如何使用xml2js库将XML格式文档字符串解析为JavaScript的对象数据,本期,我们继续学习sax,一个可以以流编程的方式解析XML。

使用流编程的方式,并没有直接将XML解析为JSON便捷,但是可以节省内存开销,同时在某些应用领域只能使用流的方式,比如远程XML事件流接口等情况。

sax

sax的使用方式如下:

const fs = require('fs');
const sax = require('sax');

fs.writeFileSync('file.xml','<xml>Hello, <who name="world">world</who>!</xml>');

let saxStream = sax.createStream();

saxStream.on('opentag', function (node) {
    console.log('opentag',node);
});

fs.createReadStream('file.xml')
  .pipe(saxStream)
  .pipe(fs.createWriteStream('file-copy.xml'));

sax的流对象不但支持data等事件以及pipe 管道,另外还提供了 opentagtextdoctypeopentagstartclosetagattributecommentopencdatacdataclosecdataopennamespaceclosenamespace等事件。

sax除了可以解析XML之外,也可以用来解析HTML文档。

参考资料

https://github.com/isaacs/sax-js

查看原文

赞 2 收藏 1 评论 0

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库051:xml2js,解析XML格式数据

NPM酷库,每天两分钟,了解一个流行NPM库。·

在NPM酷库050中,我们介绍了使用xmlbuilder创建XML格式文档,今天我们来学习如何解析XML文档数据。

xml2js

使用 xml2js 可以方便地将XML格式字符串数据解析成JavaScript中的对象数据。

const xml2js = require('xml2js');

let xml = "<root>Hello xml2js!</root>"
xml2js.parseString(xml, function (err, result) {
  console.log(result);
  // {root: "Hello xml2js!"}
});

如上所示,使用xml2js库提供的parseString函数可以方便解析XML数据。此外,xml2js也支持生成XML。

const xml2js = require('xml2js');
 
let obj = {name: "Super", Surname: "Man", age: 23};
 
let builder = new xml2js.Builder();

let xml = builder.buildObject(obj);

得到的XML格式文档数据为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
  <name>Super</name>
  <Surname>Man</Surname>
  <age>23</age>
</root>

使用xml2js库提供的Builder对象,可以方便地将JSON数据直接转成XML格式,相对于xmlbuilder库更加方便使用。

参考资料

https://github.com/Leonidas-f...

查看原文

赞 0 收藏 0 评论 0

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库050:xmlbuilder,创建XML文件

NPM酷库,每天两分钟,了解一个流行NPM库。·

在前几期NPM酷库中,我们介绍了Node.js操作JSON5、YAML、CSON、CSV等数据格式文件,在外部系统接口中,我们还会经常遇到XML格式的接口协议。从本期开始,我们介绍Node.js快速读写XML格式相关的NPM库。

xmlbuilder

本期,我们先来了解 xmlbuilder,用来创建XML格式文档。

const builder = require('xmlbuilder');

let xml = builder.create('root')
  .ele('xmlbuilder')
    .ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git')
  .end({ pretty: true});

得到的XML内容为:

<?xml version="1.0"?>
<root>
  <xmlbuilder>
    <repo type="git">git://github.com/oozcitak/xmlbuilder-js.git</repo>
  </xmlbuilder>
</root>

在示例代码中,我们使用xmlbuilder的create() 方法创建一个XML对象,然后使用该对象的 ele() 方法为XML对象添加子节点,并且返回子节点对象以支持链式调用。最终调用 end() 方法返回生成的XML字符串。

参考资料

https://github.com/oozcitak/x...

查看原文

赞 0 收藏 0 评论 0

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库049:csv-parse,解析csv文件

NPM酷库,每天两分钟,了解一个流行NPM库。·

在NPM酷库048中,我们介绍了可以将JSON数据导出为csv文件的库:json2csv,今天,今天我们再来了解如何解析、导入一个csv文件。

csv-parse

csv-parse 用于将一个文本字符串数据解析为JSON对象或数组:

const parse = require('csv-parse/lib/sync')

let data=`id,name,age
3,张三,21
4,李四,32
`;

parse(data,{ columns: true, auto_parse: true });
// [{id:3,name:'张三',age:21},{id:4,name:'李四',age:32}]

除了同步方式解析,csv-parse还提供异步函数和流对象支持。

参考资料

https://github.com/adaltas/no...

http://csv.adaltas.com/parse/

查看原文

赞 1 收藏 1 评论 0

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库048:json2csv,导出csv文件

NPM酷库,每天两分钟,了解一个流行NPM库。·

在做数据管理类应用时,尤其是管理后台,经常需要将数据导出为CSV文件,方便在Excel中离线打开查看。

json2csv

json2csv是一款用于将JSON数据转换成CSV格式文件的库。

const json2csv = require('json2csv');
const fs = require('fs');

const fields = ['car', 'price', 'color'];
const myCars = [
  {
    "car": "Audi",
    "price": 40000,
    "color": "blue"
  }, {
    "car": "BMW",
    "price": 35000,
    "color": "black"
  }, {
    "car": "Porsche",
    "price": 60000,
    "color": "green"
  }
];

let csv = json2csv({ data: myCars, fields: fields });
 
fs.writeFile('file.csv', csv, function(err) {
  if (err) throw err;
  console.log('file saved');
});

参考资料

https://github.com/zemirco/js...

查看原文

赞 1 收藏 1 评论 0

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库047:ini,解析INI配置文件

NPM酷库,每天两分钟,了解一个流行NPM库。·

最近几期我们都在研究各种数据文件类型,包括JSON5、YAML、CSON等,相对于JSON,这些格式能够更加易于人类编写和理解,所以更适合做配置文件,今天我们继续学习如何解析Windows系统上常用的*.ini配置文件。

下方就是一个INI类型的配置文件:

; this comment is being ignored
scope = global

[database]
user = dbuser
password = dbpassword
database = use_this_database

[paths.default]
datadir = /var/lib/data
array[] = first value
array[] = second value
array[] = third value

ini 库

在Node.js 中,我们使用ini库来解析INI文件:

const ini = require('ini');
const fs = require('fs');

let config = ini.parse(fs.readFileSync('config.ini', 'utf-8'));

参考资料

https://zh.wikipedia.org/wiki...

https://github.com/npm/ini

查看原文

赞 1 收藏 1 评论 0

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库046:cson-parser,解析CSON数据

NPM酷库,每天两分钟,了解一个流行NPM库。·

前两期我们分别介绍了JSON5和YAML,这两种数据格式相对于JSON,更加易于人类编写和理解,今天我们继续介绍另外一个容易编写的格式 CSON。

CSON格式全称是 CoffeeScript Object Notation,其相对于CoffeeScript就相当于JSON对于JavaScript,我们知道CoffeeScript比JavaScript语法更加易于读写,CSON对于JSON也是一样的。

下面就是一个CSON格式文件示例:

name: "cson-parser"
description: "Safe parsing of CSON files"
keywords: [
    "cson"
    "parser"
]
author:
    name: "Groupon"
    email: "opensource@groupon.com"
license: "BSD-3-Clause"
readmeFilename: "README.md"

cson-parser

cson-parser 是专门用于解析CSON文件的,一般情况下,我们将CSON用作配置文件格式,所以我们只需要解析CSON即可,不需要生成CSON功能。

const CSON = require('cson-parser');
const fs = require('fs');

let obj = CSON.parse(fs.readFileSync('example.cson', 'utf8'));

参考资料

https://github.com/groupon/cs...

查看原文

赞 0 收藏 0 评论 0

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库045:js-yaml,读写YAML

NPM酷库,每天两分钟,了解一个流行NPM库。·

在NPM酷库044中,我们了解到了相对于JSON格式更加易于编写和维护的JSON5,今天我们继续学习另外一个更加简单易读的数据格式YAML。

下方就是一个YAML数据示例:

---

receipt:     Oz-Ware Purchase Invoice
date:        2012-08-06
customer:  #对象
    given:   Dorothy
    family:  Gale

items:  # 对象数组
    - part_no:   A4786
      descrip:   Water Bucket (Filled)
      price:     1.47
      quantity:  4

    - part_no:   E1628
      descrip:   High Heeled "Ruby" Slippers
      size:      8
      price:     133.7
      quantity:  1

bill-to:  &id001 # 锚点标记 id001
    street: |  # 多行字符串
            123 Tornado Alley
            Suite 16
    city:   East Centerville
    state:  KS

ship-to:  *id001 # 引用锚点标记id001的数据

specialDelivery:  > # 多行字符串
    Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the
    man behind the curtain.
    
...

YAML格式能够和JSON格式互相转换,YAML格式相对于JSON更加易于人类编写和理解,所以更适合替代JSON用来编写配置文件。

js-yaml

js-yaml 是一个专门用来读写YAML格式数据的库,他可以将JS对象转换成YAML字符串,也可以将YAML字符串转换为JS对象。

const yaml = require('js-yaml');
const fs = require('fs');

let obj = yaml.safeLoad(fs.readFileSync('example.yml', 'utf8'));

let str = yaml.safeDump(obj);

参考资料

http://yaml.org

https://zh.wikipedia.org/wiki...

https://github.com/nodeca/js-...

查看原文

赞 0 收藏 0 评论 0

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库044:json5,更可读的JSON

NPM酷库,每天两分钟,了解一个流行NPM库。·

JSON是JS中数据交换时最常用的数据格式,其序列话和反序列化性能非常好,但是其语法却比较严格,比如以下是一个合法的JS声明,却不是一个合法的JSON:

{ foo: 'bar' }

JSON格式强制要求对象key必须以双引号包含,字符串也必须使用双引号,等等。

如果我们只是调用 JSON.stringify()JSON.parse() 来进行数据的处理,那么也没什么关系,但是如果我们需要手写JSON,比如写配置文件或数据模式定义,那么严格的JSON语法检查会给编码带来很多不便。

JSON5

JSON5 是一个JSON格式的扩展,目的是能够让人类更容易读写数据文件。JSON5只是一个第三方的库,并非JSON格式的继任者。JSON5相对于JSON,有如下各个方面优势。

对象

  • 属性key可以不用引号包含
  • 属性key可以用单引号包含
  • 可以有尾部多余逗号

数组

  • 可以有尾部多余逗号

字符串

  • 可以以单引号包含
  • 支持多行字符串

数字

  • 可以以16进制表示
  • 可以以小数点开头或结尾
  • 支持 Infinity, -Infinity, NaN, 和 -NaN.
  • 可以显式声明正号 +

注释

  • 允许当行和多行注释

如下就是一个合法的JSON5格式文件:

{
    foo: 'bar',
    while: true,

    this: 'is a \
multi-line string',

    // this is an inline comment
    here: 'is another', // inline comment

    /* this is a block comment
       that continues on another line */

    hex: 0xDEADbeef,
    half: .5,
    delta: +10,
    to: Infinity,   // and beyond!

    finally: 'a trailing comma',
    oh: [
        "we shouldn't forget",
        'arrays can have',
        'trailing commas too',
    ],
}

处理JSON5数据:

const JSON5 = require('json5');

let obj = JSON5.parse('{unquoted:"key",trailing:"comma",}');
let str = JSON5.stringify(obj);

参考资料

https://github.com/json5/json5

http://json5.org

查看原文

赞 0 收藏 0 评论 1

脉冲云_梁兴臣 发布了文章 · 2018-02-21

NPM酷库043:joi,语义化模式验证

NPM酷库,每天两分钟,了解一个流行NPM库。·

在NPM酷库042中,我们了解到了JSON Schema数据模式验证,以及ajv库。今天我们来学习另一个对象数据验证的库joi。

joi

joi 是语义化的对象数据模式验证库,所谓语义化,是指其方法名能够明确表达其含义。

const Joi = require('joi');

// 声明模式
const schema = Joi.object().keys({
    username: Joi.string().alphanum().min(3).max(30).required(),
    password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),
    access_token: [Joi.string(), Joi.number()],
    birthyear: Joi.number().integer().min(1900).max(2013),
    email: Joi.string().email()
}).with('username', 'birthyear').without('password', 'access_token');

// 验证
const result = Joi.validate({ username: 'abc', birthyear: 1994 }, schema);

// result.error === null -> valid

注意:joi并非是JSON Schema标准的实现,另外,使用ajv验证JSON Schema可以将模式配置信息保存在.json文件中,因为JSON Schema模式是声明式的,而joi则必须在代码文件中实现模式配置,因为joi的语义化必须以函数调用来实现。

参考资料

https://github.com/hapijs/joi

https://github.com/hapijs/joi...

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 115 次点赞
  • 获得 4 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 4 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

  • Alaska

    新一代开源Node.JS后端Web框架,业务模块组件化可插拔,基于Koa、Mongoose和React.js

  • Labrador

    微信小程序前端组件化开发框架,主要特性有:支持NPM库,支持Babel转码,支持组件重用。

注册于 2015-02-20
个人主页被 3.3k 人浏览