node.js を使用して json 形式のデータを MySQL にインポートする

MySQL を使用してデータベースを作成し、node.js既存のjsonデータ形式ファイルを使用してMySQLインポート可能なtxtファイルを生成し、それを新しいデータベースにインポートします。

便宜上、フォーマット ファイルを使用してjson一部のデータを保存することがあります。しかし、データ量が増えると、jsonファイルに保存されたデータはクエリするのに不便なだけでなく、追加や削除の際に危険がいっぱいです。現在、これらのデータを次の場所に転送したいと考えています。MySQLアクセスと管理のためのデータベース

MySQLtxt特定の形式のファイルからデータをインポートするための簡単なコマンドを提供します。このファイルでは、欠損値 ( )を区切る\tことによってさまざまな列が区切られています。1\NNULL

当社では、フォーマット ファイルをインポート可能なフォーマットファイルに変換するnode.jsツールを使用しますjsonMySQLtxt

早めの準備

にそのようなデータがありますtodo.json:

[
  {
    
    
    "todo":"早上7:00起","startDate":"2021-01-03T17:53:38.565354",
    "id":1,
    "isArchived":true
  }, {
    
    
    "todo":"第一个跑到学院楼","startDate":"2021-01-03T20:12:06.787177",
    "id":2,
    "isArchived":true
  }, {
    
    
    "todo":"单手杵地平板支撑","startDate":"2021-01-03T20:20:02.103439",
    "id":3,
    "isArchived":false
  }
]

todoデータが 3 つあり、各データには、 、startDateの 4 つの項目が含まれていることがわかります。このうち、ジョブid説明は文字列で表されており、ジョブが追加された時刻を正確に示しています。;は整数で表される一意の ID であり、作業が完了したかどうかを値で表します。isArchivedtodostartDateYYYY-MM-DD hh-mm-ss.uuuuuuidisArchivedbool

MySQLあらかじめデータ型がわかっているデータテーブルを作成しておく必要があるので、まずそのようなテーブルを作成します。

まず、MySQLコマンドラインプログラムを入力します。

mysql -u root -p

mysql で、新しいデータベースを作成しtest、データベースを適用します。

create database test;
use test;

次に、データに従ってjson新しいテーブルを作成しtodoidそれを自動インクリメント主キーとして設定します。

create table todo (
  id int not null auto_increment, 
  todo varchar(128) not null, 
  isArchived tinyint default 0, 
  startDate datetime, 
  primary key(id)
);

コマンドを使用して、describe todo;作成されたテーブルのタイプを表示します。

mysql> describe todo;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| todo       | varchar(128) | NO   |     | NULL    |                |
| isArchived | tinyint(4)   | YES  |     | 0       |                |
| startDate  | datetime     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.03 sec)

ここで注意してください: 1.MySQLの型のデフォルト形式はdatetimeでありYYYY-MM-DD hh-mm-ss、2 番目以降に小数部分はありません; 2.MySQLには型がなく、bool通常は0表されfalseます1true

このようにして、基本的な準備作業は完了します。

node.jsプロセスデータを使用する

ファイル変換はnode.jsこれを使用して行われ、主に次のタスクが含まれます。

  1. データを読み込みます。
  2. 特殊なデータ型 ( bool、 ) のdatetimeデータを処理します。
  3. データの形式を変換します。
  4. データを保存します。

これらのタスクを順番に完了してください。

読み取りデータ

node.jsfsファイルを読み書きするためのモジュールが付属しています。

// transform-json-to-txt-for-mysql.js
const fs = require("fs");
fs.readFile("todo.json", (err, data) => {
    
    
  let todotxt = convertJSON2TXT(data); // 处理数据
  saveTXT(todotxt); // 保存数据
});

function convertJSON2TXT(data) {
    
    
  let todotxt = "";
  // TODO 针对特殊数据类型处理数据

  // TODO 转换数据格式

  return todotxt;
}

function saveTXT(todotxt) {
    
    
  // 保存数据
}

convertJSON2TXT関数内でデータを加工し、保存したデータを使用しますsaveTXT

特殊なデータ型のデータを処理します

jsonこの部分では、元のファイル (例: ) 内のこのstartDate項目のデータをのタイプのデフォルト形式"2021-01-03T17:53:38.565354"処理します。つまり、最初に元のデータをスペースに変更し、次に最後の 7 桁 ( ) を削除します。MySQLdatetime"YYYY-MM-DD hh-mm-ss""T"" "".565354"

次に、isArchivedこの項目については、0で表しfalse1で表しますtrue

function convertJSON2TXT(data) {
    
    
  let todotxt = '';
  // 针对特殊数据类型处理数据
  let todo = JSON.parse(data.toString());
  todo.forEach((val) => {
    
    
    val.isArchived = val.isArchived ? 1 : 0;
    val.startDate = val.startDate.replace("T", " ").substr(0, 19);
  });
  // TODO 转换数据格式

  return todotxt;
}

todo処理されたデータは に保存されます

データ形式を変換する

ここでは、異なる列を区切るために を使用します\tが、列の順序はMySQLtableの列の順序と同じでありtodo、行の末尾が\r\n区切られていることに注意してください。

function convertJSON2TXT(data) {
    
    
  let todotxt = '';
  // 针对特殊数据类型处理数据
  let todo = JSON.parse(data.toString());
  todo.forEach((val) => {
    
    
    val.isArchived = val.isArchived ? 1 : 0;
    val.startDate = val.startDate.replace("T", " ").substr(0, 19);
  });
  // TODO 转换数据格式
  todo.forEach((val) => {
    
    
    todotxt += `${
      
      val.id}\t${
      
      val.todo}\t${
      
      val.isArchived}\t${
      
      val.startDate}\r\n`;
  })

  return todotxt.substr(0, todotxt.length - 2); // 去掉多余的行
}

セーブデータ

ここでは、データの保存もfsモジュールを使用して実装されています。

function saveTXT(todotxt) {
    
    
  // 保存数据
  fs.writeFile("todo.txt", todotxt, (err) => {
    
    
    if (err) {
    
    
      console.log("error occurs");
    } else {
    
    
      console.log("write to todo.txt:");
      console.log(todotxt);
    }
  });
}

最終的なファイルは、 GitHub リポジトリで参照できます。2

ファイルを実行してファイルを生成しますtodo.txt

$ node transform-json-to-txt-for-mysql.js
write to todo.txt:
1	早上7:00起	1	2021-01-03 17:53:38
2	第一个跑到学院楼	1	2021-01-03 20:12:06
3	单手杵地平板支撑	0	2021-01-03 20:20:02

ファイルのインポート

MySQLコマンドラインからtodo.txttable にインポートしますtodo

load data local infile './todo.txt' into table todo;

todo.txtファイルと同じディレクトリからmysqlコマンドライン プログラムを入力するか、todo.txtファイルの絶対パスを指定する必要があることに注意してください。

load data local infile '/path/to/todo.txt' into table todo;

入力されたデータを確認します。

mysql> select * from todo;
+----+--------------------------+------------+---------------------+
| id | todo                     | isArchived | startDate           |
+----+--------------------------+------------+---------------------+
|  1 | 早上7:00起               |          1 | 2021-01-03 17:53:38 |
|  2 | 第一个跑到学院楼         |          1 | 2021-01-03 20:12:06 |
|  3 | 单手杵地平板支撑         |          0 | 2021-01-03 20:20:02 |
+----+--------------------------+------------+---------------------+
3 rows in set (0.00 sec)

  1. https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html ↩︎

  2. すべてのコード ↩︎

おすすめ

転載: blog.csdn.net/weixin_41231535/article/details/113920062