Используя Node.JS, как мне прочитать файл JSON в (серверную) память?
Фон
Я экспериментирую с Node.js и хотел бы прочитать объект JSON из текстового файла или файла .js(что лучше?) в память, чтобы я мог быстро получить доступ к этому объекту от кода. Я понимаю, что есть такие вещи, как Монго, Альфред и т.д., Но сейчас это не то, что мне нужно.
Вопрос
Как я могу прочитать объект JSON из текстового или js файла и в память сервера с помощью JavaScript/ Node?
Ответы
Ответ 1
Синхронизация:
var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('file', 'utf8'));
асинхронный:
var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) {
if (err) throw err;
obj = JSON.parse(data);
});
Ответ 2
Самый простой способ, который я нашел для этого, - просто использовать require
и путь к вашему файлу JSON.
Например, предположим, что у вас есть следующий JSON файл.
test.json
{
"firstName": "Joe",
"lastName": "Smith"
}
Затем вы можете легко загрузить его в свое приложение node.js, используя require
var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);
Ответ 3
Асинхронный есть по какой-то причине! Бросает камень в @mihai
В противном случае, вот код, который он использовал с асинхронной версией:
// Declare variables
var fs = require('fs'),
obj
// Read the file and send to the callback
fs.readFile('path/to/file', handleFile)
// Write the callback function
function handleFile(err, data) {
if (err) throw err
obj = JSON.parse(data)
// You can now play with your datas
}
Ответ 4
Как минимум в Node v8.9.1, вы можете просто сделать
var json_data = require('/path/to/local/file.json');
и получить доступ ко всем элементам объекта JSON.
Ответ 5
В Node 8 вы можете использовать встроенный util.promisify()
для асинхронного чтения файла, подобного этому
const {promisify} = require('util')
const fs = require('fs')
const readFileAsync = promisify(fs.readFile)
readFileAsync(`${__dirname}/my.json`, {encoding: 'utf8'})
.then(contents => {
const obj = JSON.parse(contents)
console.log(obj)
})
.catch(error => {
throw error
})
Ответ 6
использование node-fs-extra (асинхронное ожидание)
const readJsonFile = async () => {
try {
const myJsonObject = await fs.readJson('./my_json_file.json');
console.log(myJsonObject);
} catch (err) {
console.error(err)
}
}
readJsonFile() // prints your json object
Ответ 7
https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfile_file_options_callback
var fs = require('fs');
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err;
console.log(data);
});
// options
fs.readFile('/etc/passwd', 'utf8', callback);
https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfilesync_file_options
Вы можете найти все использование Node.js в документах файловой системы!
надеюсь, эта помощь для вас!
Ответ 8
function parseIt(){
return new Promise(function(res){
try{
var fs = require('fs');
const dirPath = 'K:\\merge-xml-junit\\xml-results\\master.json';
fs.readFile(dirPath,'utf8',function(err,data){
if(err) throw err;
res(data);
})}
catch(err){
res(err);
}
});
}
async function test(){
jsonData = await parseIt();
var parsedJSON = JSON.parse(jsonData);
var testSuite = parsedJSON['testsuites']['testsuite'];
console.log(testSuite);
}
test();
Ответ 9
Использовать пакет fs-extra довольно просто:
Синхронизация:
const fs = require('fs-extra')
const packageObj = fs.readJsonSync('./package.json')
console.log(packageObj.version)
асинхронный:
const fs = require('fs-extra')
const packageObj = await fs.readJson('./package.json')
console.log(packageObj.version)
Ответ 10
Если вы ищете полное решение для Async
загрузки JSON файла из Relative Path
с обработкой ошибок
// Global variables
// Request path module for relative path
const path = require('path')
// Request File System Module
var fs = require('fs');
// GET request for the /list_user page.
router.get('/listUsers', function (req, res) {
console.log("Got a GET request for list of users");
// Create a relative path URL
let reqPath = path.join(__dirname, '../mock/users.json');
//Read JSON from relative path of this file
fs.readFile(reqPath , 'utf8', function (err, data) {
//Handle Error
if(!err) {
//Handle Success
console.log("Success"+data);
// Parse Data to JSON OR
var jsonObj = JSON.parse(data)
//Send back as Response
res.end( data );
}else {
//Handle Error
res.end("Error: "+err )
}
});
})
Структура каталогов:
![введите описание изображения здесь]()