处理Json文件并将处理后的数据写入新文件
问题描述
事情是这样的 ,朋友让我处理一个json文件并将处理后的数据写入新文件 。这个json文件的结构如下:
[
{
"head_img": "http://wx.qlogo.cn/mmhead/xxxxxxxxxxx",
"nick_name": "xxxxxxx",
"user_name": "",
"wxid": "wxid_xxxxxxxxxxxx"
},
...
]
这个json文件中的这个json数组大小是25w条数据 ,现在他只想要wxid这个属性的值 ,并且将它写出到一个txt的文件中 ,没5000个为一个txt文件 ,每个值为一行 。也就是最后给他50个txt文件 ,每个里面有5000行wxid的值 。
实现过程
解决问题的方法有很多 ,可以用python 、nodejs 、Java等任何你熟悉的语言实现 ,我这里使用nodejs来实现一下 ,因为它简单并且不需要引入第三方的库 。
这里涉及到了文件的读取和写入 ,因此用到nodejs自带的fs模块 。具体实现代码如下:
const fs = require("fs") //引入fs模块
const data = fs.readFileSync(test.json,utf8); //读取json文件
let temp = JSON.parse(data) //将数据解析为json对象
let tempIndex = 0; //临时索引 ,用来计数是否到达5000条
let tempFileCount = 1 //临时文件计数 ,用于计数文件名,result1...result50
temp.forEach(element => { //遍历json数组
if(tempIndex<5000){ //判断是否小于5000 ,如果是则写入当前文件 ,这里使用的是追加的写入方式
fs.appendFileSync("result"+tempFileCount+".txt",element.wxid+\r,utf8,function(err){},tempIndex++)
}else{ //当tempIndex等于5000时写入新的文件,并且将文件名计数加一
console.log("create new file")
tempFileCount++;
fs.appendFileSync("result"+tempFileCount+".txt",element.wxid+\r,utf8,function(err){},console.log(tempFileCount+: 开始写入))
tempIndex = 0;
}
});
用Nodejs解析json数据
nodejs是服务器端的javascript的处理平台 。json(JavaScript Object Notation) 是一种轻量级的数据交换格式 。我们在写服务端的程序时往往需要使用json来处理数据 。
这里我们用一个简单的例子来演示如何用nodejs来处理json数据文件 。
第一 ,我们需要在ubuntu14.04上安装nodejs ,我们可以使用如下命令:
$ sudo apt-get install nodejs
安装完毕, 我们可以使用如下命令进行测试:
$ nodejs -v
v0.10.25
第二 ,准备一个测试json文件, test.json ,内容如下:
{
"person": {
"name": "wanger",
"birth": "1999"
}
}
第三 ,创建js脚本来解析json文件 ,main.js
#!/usr/bin/nodejs
var cwd = process.argv[1].substring(0, process.argv[1].lastIndexOf("/"));
var fs = require(fs);
function load(file, cb) {
fs.readFile(file, function(err, data) {
if (err)
throw err;
cb(JSON.parse(data.toString()));
});
}
(function() {
if (process.argv.length < 2) {
console.log("usage\n\t" + process.argv[1] + " loadfile");
return;
}
load(process.argv[2], function(obj) {
console.log("%s\n", obj.person.name);
console.log("%s\n", obj.person.birth);
});
})();
第四 ,测试和运行
$ ./main.js test.json
wanger
1999
以上为个人经验 ,希望能给大家一个参考 ,也希望大家多多支持本站 。
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理。