使用node.js编写脚本将JSON数据转换为SQL语句

安装依赖模块

当node.js脚本在运行的时候,需要很多支持模块,这些模块存储在node_modules文件夹中。该脚本在执行过程中需要使用到fsstring-format两个支持模块,作用分别是:

  • fs:支持node脚本读取文件。
  • string-format:创建格式化字符串

新建一个文件夹,在其中安装支持模块。安装过程如下:

  1. 打开“命令提示符”或者“终端”,输入
    npm install fs string-format

    由于没有创建package.json文件,因此无需输入-S命令。

  2. 安装编辑器自动提示支持文件(由于笔者使用的编辑器是Visual Studio Code,支持使用TypeScript脚本作为自动补全文档的来源)。在命令提示符或终端中输入
    tsd install node -ros

    输入参数指令 -ros 的目的是在typings文件夹下创建tsd.d.ts文件,将所有用于提示的文件在这个文件中全部用

    /// reference path="..."

    语句引用,这样在主文件中只需要使用

    /// reference path="typings/tsd.d.ts"

    引用即可出现所有的自动补全文件

编程实现

  1. 首先要引入安装的依赖模块。在文件开头输入
    // require modules
    var fs = require('fs');
    var format = require('string-format');

    使用Visual Studio Code的话,可以在文件开头加入 /// reference path="typings/tsd.d.ts" 插入自动补全。

  2. 随后读取JSON文件,并转换为JSON对象。
    var ShopJson = JSON.parse(fs.readFileSync("Shop_Only2100.json"));

    这个JSON文件是利用ArcGIS软件导出的数据,因此有其固定格式。在下文读取中按照该格式进行读取,不同文件的读取方式不同。

  3. 创建写文件流。
    var ofs = fs.createWriteStream("./SqlScripts/Shop.sql");

     

  4. 读取数据
    ShopJson['features'].forEach(function(iFeature) {
        var iData = iFeature['attributes'];
        if (iData['TELEPHONE'] == ' ') {
            iData['TELEPHONE'] = '';
        }
        if (iData['ADDRESS'] == ' ') {
            iData['ADDRESS'] = '';
        }
        iData['Lon'] = iFeature['geometry']['points'][0][0];
        iData['Lat'] = iFeature['geometry']['points'][0][1];
    }, this);

     

  5. 写文件。提取了一条数据之后,转换为SQL语句存储到文件中。
    ofs.write(format('INSERT INTO supermarket(FID, SuperMarketNAME, KIND, TELEPHONE, REGION_ID, LONGITUDE, LATITUDE) VALUES({FID_购物_p}, "{NAME}", "{KIND}", "{"{ADDRESS}", {FID_Wuhan}, {Lon}, {Lat});\n', iData));

     

完成!

完整代码

 1 /// <reference path="typings/tsd.d.ts" />
 2 // convert Shop_Only2100.json to sql script
 3 var fs = require('fs');
 4 var format = require('string-format')
 5 // create write stream
 6 var ofs = fs.createWriteStream("./SqlScripts/Shop.sql");
 7 // read file
 8 var ShopJson = JSON.parse(fs.readFileSync("Shop_Only2100.json"));
 9 ShopJson['features'].forEach(function(iFeature) {
10     var iData = iFeature['attributes'];
11     if (iData['TELEPHONE'] == ' ') {
12         iData['TELEPHONE'] = '';
13     }
14     if (iData['ADDRESS'] == ' ') {
15         iData['ADDRESS'] = '';
16     }
17     iData['Lon'] = iFeature['geometry']['points'][0][0];
18     iData['Lat'] = iFeature['geometry']['points'][0][1];
19     ofs.write(format('INSERT INTO supermarket(FID, SuperMarketNAME, KIND, TELEPHONE, ADDRESS, 
20         REGION_ID, LONGITUDE, LATITUDE) VALUES({FID_购物_p}, "{NAME}", "{KIND}", "{TELEPHONE}", 
21         "{ADDRESS}", {FID_Wuhan}, {Lon}, {Lat});\n', iData));
22 }, this);
23 console.log("Done!")

 

posted @ 2016-07-29 00:01  Msspblxh  阅读(2573)  评论(1编辑  收藏  举报