it-swarm.com.ru

Используя Node.JS, как мне прочитать файл JSON в (серверную) память?

Фон

Я провожу некоторые эксперименты с Node.js и хотел бы прочитать объект JSON, либо из текстового файла, либо из файла .js (что лучше ??) в память, чтобы я мог быстро получить доступ к этому объекту из кода. Я понимаю, что есть такие вещи, как Монго, Альфред и т.д., Но это не то, что мне сейчас нужно.

Вопрос

Как мне прочитать объект JSON из текстового или js-файла и в память сервера, используя JavaScript/Node?

512
Matt Cashatt

Синхронизация:

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);
});
1044
mihai

Я нашел самый простой способ сделать это - просто использовать require и путь к вашему файлу JSON.

Например, предположим, у вас есть следующий файл JSON.

test.json

{
  "firstName": "Joe",
  "lastName": "Smith"
}

Затем вы можете легко загрузить это в ваше приложение node.js, используя require

var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);
347
Travis Tidwell

Асинхронный есть причина! бросает камень в @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
}
55
Florian Margaine

По крайней мере в Node v8.9.1 вы можете просто сделать

var json_data = require('/path/to/local/file.json');

и получить доступ ко всем элементам объекта JSON.

31
Alex Eftimiades

В 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
  })
13
J P

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 в документации по файловой системе!
надеюсь, это поможет вам!

2
xgqfrms

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);
    }

})

}

проверка асинхронной функции () {

jsonData = await parseIt();
var parsedJSON = JSON.parse(jsonData);
var testSuite = parsedJSON['testsuites']['testsuite'];
console.log(testSuite);

}

тестовое задание();

1
Satyabrata Saha

Использовать пакет 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) 
0
Arturo Menchaca