programing

노드 사용.JS, JSON 파일을 (서버) 메모리로 읽으려면 어떻게 해야 하나요?

yoursource 2022. 10. 23. 19:56
반응형

노드 사용.JS, JSON 파일을 (서버) 메모리로 읽으려면 어떻게 해야 하나요?

배경

Node.js에서 실험을 하고 있는데 텍스트 파일 또는 .js 파일 중 하나에서 JSON 개체를 읽고 싶습니다(어느 쪽이 좋습니까?).코드에서 오브젝트에 빠르게 액세스 할 수 있도록 메모리에 저장합니다.Mongo, Alfred 등의 존재는 알고 있습니다만, 지금 당장 필요한 것은 아닙니다.

질문.

JavaScript/Node를 사용하여 텍스트 또는 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"
}

그런 "Da"를 node.에 쉽게 할 수 .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
}

적어도 노드 v8.9.1에서는 다음 작업을 수행할 수 있습니다.

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

JSON 객체의 모든 요소에 액세스합니다.

ES6 모듈 구문 및 비동기/대기 사용으로 2022년에 대한 답변

최신 JavaScript에서는 추가 패키지를 설치할 필요 없이 원라이너로 실행할 수 있습니다.

import { readFile } from 'fs/promises';

let data = JSON.parse(await readFile("filename.json", "utf8"));

try/catch블록을 사용하여 필요에 따라 예외를 처리합니다.

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

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) 

사용, node-fs-module(node-fs-module)

const readJsonFile = async () => {
    const myJsonObject = await fs.readJson('./my_json_file.json');
    console.log(myJsonObject);
}

readJsonFile() // prints your json object

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의 모든 사용 방법은 파일 시스템 문서에서 확인할 수 있습니다.
!!이!!!!!!!!

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

답변이 너무 많아서 동기 대 비동기 대 요구 대 비동기 대 비동기 대 요구 비교 벤치마크를 만든 사람은 없습니다.require, readFileSync 및 readFile을 통해 메모리에서 json을 읽는 사용 사례의 차이를 설명했습니다.

Async, 로딩, JSON 파일 로딩Relative Path Error Handling ( 처리)

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

디렉토리 구조:

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/10011011/using-node-js-how-do-i-read-a-json-file-into-server-memory

반응형