【node】將Object內容寫入到文件中,並獲取的技巧

前言:接到這麼一個需求,需要將每個模塊exports出來的對象拼接成一個新的對象,並寫入到一個新的js文件中。

 

一、準備工作

1、在nodeTest文件夾下創建3個js文件

└─ nodeTest
   ├─── obj1.js
   ├─── obj2.js
   └─── test.js
//obj1.js
module.exports = {
    nick:{
        name: "nick",
        age: 22,
        sex: "男"
    }
}
//obj2.js
module.exports = {
    freddy:{
        name: "freddy",
        age: 24,
        sex: "男"
    }
}
//test.js
const fs = require('fs');
let obj1 = require('./obj1.js'),
    obj2 = require('./obj2.js'),
    newObj = {};

newObj = {
    ...obj1,
    ...obj2
}

//通過fs模塊的writeFileSync進入內容寫入
fs.writeFileSync('./newObj.js', newObj);

2、然後在node環境下運行該test.js,進行newObj文件寫入

會發現並不能拿到自己想要的內容,這是因爲writeFileSync是最終是通過將內容轉換成字節碼進行寫入的,而類型爲Object內容沒辦法轉換成字節碼,會被先轉換成字符類型。最終出現上述類型。

 

二、解決方案

1、通過JSON.parse跟JSON.stringify之間的巧妙轉換進行寫入

//test.js
const fs = require('fs');
let obj1 = require('./obj1.js'),
    obj2 = require('./obj2.js'),
    newObj = {},
    writeStr = '';

newObj = {
    ...obj1,
    ...obj2
};
writeStr = `let newObj = JSON.parse('${JSON.stringify(newObj)}'); 
console.log(newObj);
`;
fs.writeFileSync('./newObj.js', writeStr); 

2、然後在node環境下運行該test.js,進行newObj文件寫入

3、然後在node環境下運行該newObj.js,查看結果

這樣就能拿到我們需要的結果啦!

 

三、注意事項

1、注意事項一:JSON轉換問題

let obj = {
    test1: 1,
    test2: '1',
    test3: true,
    test4: null,
    test5: function(){},
    test6: undefined,
    test7: Symbol('1')
}
let newObj = JSON.parse(JSON.stringify(obj));
console.log(newObj);

如果對象屬性值爲function、undefined、Symbol類型,通過JSON轉換時,會將這些屬性刪掉。其他類型並不會出現這問題。

 

2、注意事項二:屬性值中同時出現單引號和雙引號時,寫入文件後,會出現JSON.parse轉換報錯問題

const fs = require('fs');
let newObj = {
    test: '<i class="className"></i>'
};
writeStr = `let newObj = JSON.parse('${JSON.stringify(newObj)}'); 
console.log(newObj);
`;
fs.writeFileSync('./newObj.js', writeStr); 

會發現新寫入的內容會存在轉義符。

運行newObj.js

如果這個其實不是JSON.stringify的轉換問題,而且node文件寫入導致的問題。

處理方案

​const fs = require('fs');
let newObj = {
    test: "<i class='className'></i>"
};
writeStr = "let newObj = JSON.parse(`"+ JSON.stringify(newObj) +"`);"+ 
"console.log(newObj);";
fs.writeFileSync('./newObj.js', writeStr); 

這裏注意我是用反引號進行拼裝,這樣寫入的時候就不會出現轉義符了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章