[javascript] Node.JS를 사용하여 JSON 파일을 (서버) 메모리로 어떻게 읽습니까?

배경

Node.js로 실험을하고 있으며 텍스트 파일이나 .js 파일 (더 나은 ??)에서 JSON 객체를 메모리로 읽어 코드에서 빠르게 객체에 액세스 할 수 있습니다. 나는 몽고, 알프레드 등과 같은 것들이 있다는 것을 알고 있지만 그것은 지금 내가 필요한 것이 아닙니다.

질문

JavaScript / 노드를 사용하여 텍스트 나 js 파일에서 서버 메모리로 JSON 객체를 읽으려면 어떻게해야합니까?



답변

동조:

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


답변

내가 찾은 가장 쉬운 방법은 requireJSON 파일의 경로와 경로를 사용 하는 것입니다.

예를 들어 다음 JSON 파일이 있다고 가정합니다.

test.json

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

그런 다음 이것을 사용하여 node.js 응용 프로그램에 쉽게로드 할 수 있습니다 require

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


답변

이유가 비동기식입니다! @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
}


답변

적어도 Node v8.9.1에서는 할 수 있습니다

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

JSON 객체의 모든 요소에 액세스하십시오.


답변

노드 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
  })


답변

하여 노드 FS-여분 (비동기 AWAIT)

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


답변

사용 FS를-추가 패키지는 매우 간단합니다 :

동조:

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)