Nodejs處理Json文件並將處理後的數據寫入新文件中

處理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

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: