Node.js 如何将表格字符串转换为JSON
表格: 以行和列显示的信息被称为“表格格式”。数据表是一种组织和实用的方法,用于显示包含重复数据项的大量信息。大多数办公生产力软件包,包括文字处理软件和电子表格,都具有以表格格式输入文本和数据的功能。
示例:
<table>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>A1</td>
<td>A2</td>
<td>A3</td>
</tr>
<tr>
<td>B1</td>
<td>B2</td>
<td>B3</td>
</tr>
<tr>
<td>C1</td>
<td>C2</td>
<td>C3</td>
</tr>
</tbody>
</table>
JSON:JavaScript对象表示法,简称JSON。它是一种基于文本的数据传输格式,保留数据的组织结构。它支持在服务器上快速执行的数据结构,例如数组、对象和JSON文档。它还是一种基于JavaScript的语言无关的格式。JSON文件应该以.json扩展名和application/json媒体类型保存。
示例:
[
[
{ 'Column 1': 'A1', 'Column 2': 'A2', 'Column 3': 'A3' },
{ 'Column 1': 'B1', 'Column 2': 'B2', 'Column 3': 'B3' },
{ 'Column 1': 'C1', 'Column 2': 'C2', 'Column 3': 'C3' }
]
]
过程: 我们需要一个将表格格式或字符串转换为JSON的NPM包,名为“tabletojson”。
npm install tabletojson
在这个包中,convert()和convertUrl()方法允许我们将标记表作为字符串、HTML块、整个页面和URL(可选的回调函数;也支持Promise)传递。每次都会返回一个数组作为响应。页面中的表格由响应中的每个数组条目表示(以HTML中找到的顺序相同)。
示例1: 在这个示例中,我们将使用包含任何表格数据的远程URL,来演示将表格转换为JSON的convertUrl()方法。首先,我们将从tabletojson模块中导入一个名为Tabletojson的类,并将其存储在一个名为tabletojson的变量中。这个convertUrl()方法将从这个类引用变量中调用。这个convertUrl()方法将接受以下两个参数:
参数:
- 第一个参数将是一个远程URL或Web URL,其中包含任何表格式数据。
- 第二个参数将是一个在成功将表格式数据转换为JSON完成后执行的回调函数。
项目结构: 如下所示。
app.js
const tabletojson = require('tabletojson').Tabletojson;
tabletojson.convertUrl(
'https://en.wikipedia.org/wiki/Tata_Consultancy_Services',
function (tablesAsJson) {
console.log(tablesAsJson[1]);
}
);
运行应用程序的步骤: 打开终端并输入以下命令。
node app.js
示例2: 在这个示例中,我们将使用一个包含一些以表格格式展示的数据的本地HTML文件,以演示将表格转换为JSON数据的示例。首先,我们需要在app.js文件中导入来自tabletojson模块的Tabletojson类。在这个类中,有一个convert方法,我们将使用它来将表格数据转换为JSON。在开始编写代码之前,我们需要了解两种我们将在实现中使用的方法。第一个方法是fs.readFileSync(),第二个方法是path.resolve()。下面,我们将简要解释这两种方法以及它们的语法、参数和返回值。
使用fs.readFileSync()方法: fs模块包含一个称为fs.readFileSync()的应用程序编程接口(API),可用于读取文件并返回其内容。
语法:
fs.readFileSync( path, options )
参数:
- path(路径): 使用文本文件的相对路径。也可以使用URL类型的路径。此外,文件也可以是文件描述符。如果两个文件位于同一文件夹,只需将文件名放在引号中。
- options(选项): 这是一个可选参数,包含编码、标志和编码中的数据定义。其默认值为null,返回原始缓冲区,标志包括有关文件操作的信息。默认值为“r”。
返回值: 此方法将返回文件的内容。
使用path.resolve()方法: 可以使用path.resolve()方法解析一系列路由段为绝对路径。它通过从右到左的路径顺序将每个路径加在一起,直到生成绝对路径。所得到的路径被规范化,并删除任何必要的尾部斜杠。
语法:
path.resolve( [...paths] )
参数:
- paths: 它由一组文件路径组成,这些路径将被合并为绝对路径。如果该参数的值不是字符串,则会引发 TypeError。
返回值: 此方法将返回一个包含绝对路径的字符串。
项目结构:
table.html文件: 在示例中使用此HTML文件作为展示演示的示例数据。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>GeeksforGeeks</title>
</head>
<body>
<table>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>A1</td>
<td>A2</td>
<td>A3</td>
</tr>
<tr>
<td>B1</td>
<td>B2</td>
<td>B3</td>
</tr>
<tr>
<td>C1</td>
<td>C2</td>
<td>C3</td>
</tr>
</tbody>
</table>
</body>
</html>
app.js文件:
const tabletojson = require('tabletojson').Tabletojson;
const fs = require('fs');
const path = require('path');
const html = fs.readFileSync(path.resolve(__dirname, 'table.html'),
{ encoding: 'UTF-8' });
const converted = tabletojson.convert(html);
console.log(converted);
输出: