노드 사용.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);
});
내가 알아낸 가장 쉬운 방법은 그냥 사용하는 것이다.require
JSON の 。
예를 들어 다음과 같은 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
'programing' 카테고리의 다른 글
로드 시 Larabel/Allustive 모델에 사용자 지정 속성을 추가하시겠습니까? (0) | 2022.11.01 |
---|---|
리스트에 쇼트 포함 기능이 있나요? (0) | 2022.11.01 |
PHP 코드를 "컴파일"하여 바이트 코드 인터프리터에 의해 실행되는 바이너리 같은 파일을 업로드할 수 있습니까? (0) | 2022.10.23 |
Java 클래스가 동등한 기능을 구현해야 하는 이유는 무엇입니까? (0) | 2022.10.23 |
zend 프레임워크에서 정확한 SQL 쿼리를 인쇄하는 방법 (0) | 2022.10.23 |