使用node.js编写脚本将JSON数据转换为SQL语句
安装依赖模块
当node.js脚本在运行的时候,需要很多支持模块,这些模块存储在node_modules文件夹中。该脚本在执行过程中需要使用到fs、string-format两个支持模块,作用分别是:
- fs:支持node脚本读取文件。
- string-format:创建格式化字符串
新建一个文件夹,在其中安装支持模块。安装过程如下:
- 打开“命令提示符”或者“终端”,输入
npm install fs string-format
由于没有创建package.json文件,因此无需输入-S命令。
- 安装编辑器自动提示支持文件(由于笔者使用的编辑器是Visual Studio Code,支持使用TypeScript脚本作为自动补全文档的来源)。在命令提示符或终端中输入
tsd install node -ros
输入参数指令 -ros 的目的是在typings文件夹下创建tsd.d.ts文件,将所有用于提示的文件在这个文件中全部用
/// reference path="..."
语句引用,这样在主文件中只需要使用
/// reference path="typings/tsd.d.ts"
引用即可出现所有的自动补全文件
编程实现
- 首先要引入安装的依赖模块。在文件开头输入
// require modules
var fs = require('fs');
var format = require('string-format');使用Visual Studio Code的话,可以在文件开头加入 /// reference path="typings/tsd.d.ts" 插入自动补全。
- 随后读取JSON文件,并转换为JSON对象。
var ShopJson = JSON.parse(fs.readFileSync("Shop_Only2100.json"));这个JSON文件是利用ArcGIS软件导出的数据,因此有其固定格式。在下文读取中按照该格式进行读取,不同文件的读取方式不同。
- 创建写文件流。
var ofs = fs.createWriteStream("./SqlScripts/Shop.sql"); - 读取数据
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); - 写文件。提取了一条数据之后,转换为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));
完成!
完整代码
/// <reference path="typings/tsd.d.ts" />
// convert Shop_Only2100.json to sql script
var fs = require('fs');
var format = require('string-format')
// create write stream
var ofs = fs.createWriteStream("./SqlScripts/Shop.sql");
// read file
var ShopJson = JSON.parse(fs.readFileSync("Shop_Only2100.json"));
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];
ofs.write(format('INSERT INTO supermarket(FID, SuperMarketNAME, KIND, TELEPHONE, ADDRESS,
REGION_ID, LONGITUDE, LATITUDE) VALUES({FID_购物_p}, "{NAME}", "{KIND}", "{TELEPHONE}",
"{ADDRESS}", {FID_Wuhan}, {Lon}, {Lat});\n', iData));
}, this);
console.log("Done!")
使用node.js编写脚本将JSON数据转换为SQL语句的更多相关文章
- Python将JSON格式数据转换为SQL语句以便导入MySQL数据库
前文中我们把网络爬虫爬取的数据保存为JSON格式,但为了能够更方便地处理数据.我们希望把这些数据导入到MySQL数据库中.phpMyadmin能够把MySQL数据库中的数据导出为JSON格式文件,但却 ...
- node.js学习笔记之json数据转string
Node.js中的JSON问题 var str = '{"dir":"kunhony","param":"archive&qu ...
- 将excel表格数据转换为sql语句
今天刚从经理那学到的,迫不及待写下来,以后肯定用得上 1.首先是将excel文件另存为csv格式文件 2.在当前行的最后新增一列,输入下面函数(其中表字段因人而异) =CONCATENATE(&quo ...
- 为Node.js编写组件的几种方式
本文主要备忘为Node.js编写组件的三种实现:纯js实现.v8 API实现(同步&异步).借助swig框架实现. 关键字:Node.js.C++.v8.swig.异步.回调. 简介 首先介绍 ...
- Node.js编写CLI的实践
导语:通常而言,Node.js的应用场景有前后端分离.海量web页面渲染服务.命令行工具和桌面端应用等等.本篇文章选取CLI(Command Line Tools)这子领域,来谈谈Node.js编写C ...
- Node.js编写be的流程(express)
Node.js编写be的流程 1.当前项目目录下首先安装express 2.自动生成express插件结构 express -e 3.执行完前两步的效果 4.此时的package.json ...
- 在 Node.js 中处理大 JSON 文件
在 Node.js 中处理大 JSON 文件 场景描述 问题一: 假设现在有一个场景,有一个大的 JSON 文件,需要读取每一条数据经过处理之后输出到一个文件或生成报表数据,怎么能够流式的每次读取一条 ...
- Node.js学习之TCP/IP数据通讯
Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...
- js进阶ajax读取json数据(ajax读取json和读取普通文本,和获取服务器返回数据(链接)都是一样的,在url处放上json文件的地址即可)
js进阶ajax读取json数据(ajax读取json和读取普通文本,和获取服务器返回数据(链接)都是一样的,在url处放上json文件的地址即可) 一.总结 ajax读取json和读取普通文本,和获 ...
随机推荐
- Javascript多线程引擎(一)
Javascript多线程引擎(一) Javascript 天生是单线程的语言, 不支持synchronized等线程操作, 但是这便不妨碍Javascript作为web语言中最具有魅力语言之一. 虽 ...
- linux创建进程和等待进程退出
在WIN32下,在一个进程里我们可以使用CreateProcess()创建一个进程,然后通过调用WaitForSingleObect(), WaitForMultipleObject()等待进程退出. ...
- 由link()和symlink()谈到软链接与硬链接
任何一个文件可以有多个目录项指向其i节点.创建一个向现存文件连接的方法是使用l i n k函数. #include <unistd.h> int link(const char * e x ...
- 1572: [Usaco2009 Open]工作安排Job[贪心]
Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单 ...
- SQLSERVER利用FOR XML PATH实现分组拼接字符串
首先看一下数据结构表 IF(OBJECT_ID('tempdb..#tProduct')IS NOT NULL) DROP TABLE #tProduct SELECT * INTO #tProduc ...
- 迟到的 WPF 学习 —— 控件
这一章书中内容比较多而杂,但每个对象的内容又相对简短,所以只挑选里边有代表性的内容做记录. 1. Label 控件:一个基础的简单的 ContentControl,Labe 支持快捷键文本的设置,可以 ...
- JavaScript事件的几个细节
JavaScript事件的几个细节 一.是捕获还是冒泡 昨天被问到一个问题:事件流有几个阶段?在这几个阶段中,事件一共发生几次? 问题很简单,但对于事件一共发生几次有点乱.总觉得捕获也能触发事件.冒泡 ...
- 线性回归,logistic回归和一般回归
1 摘要 本报告是在学习斯坦福大学机器学习课程前四节加上配套的讲义后的总结与认识.前四节主要讲述了回归问题,回归属于有监督学习中的一种方法.该方法的核心思想是从连续型统计数据中得到数学模型,然后将该数 ...
- VS2003与Win7的兼容性问题
VS2003并不官方支持Win7,目前大家遇到的主要是两个问题: 1. 在debug的时候,*.pdb文件在会被devenv.exe给lock住,当调适过一次之后,再进行编译的时候会有lnk1201的 ...
- iOS 监听声音按键
有时在项目中需要监听用户是否按下了物理声音键,然后来做某些操作,如:你自定义了一个照相功能,希望用户按下声音按键时也能进行拍照,苹果自带的照相机就有这种功能. 监听物理声音键是否按下的方法有很多中,我 ...