Node.js를 사용하여 JSON을 어떻게 구문 분석해야합니까? JSON의 유효성을 검사하고 구문 분석하는 모듈이 있습니까?
답변
간단하게 사용할 수 있습니다 JSON.parse
.
JSON
객체 의 정의 는 ECMAScript 5 사양의 일부입니다 . node.js는 ECMA 표준을 준수하는 Chrome의 V8 엔진을 기반으로합니다. 따라서 node.js에는 전역 객체 [docs]도 있습니다.JSON
주 – JSON.parse
현재 스레드는 동기식이기 때문에 묶을 수 있습니다. 따라서 큰 JSON 객체를 구문 분석하려는 경우 스트리밍 json 파서를 사용하십시오.
답변
.json 파일 이 필요할 수 있습니다.
var parsedJSON = require('./file-name');
예를 들어 config.json
소스 코드 파일과 동일한 디렉토리에 파일 이있는 경우 다음을 사용합니다.
var config = require('./config.json');
또는 (파일 확장자는 생략 할 수 있습니다) :
var config = require('./config');
참고 require
인 동기 만 파일을 읽고 한 번은 , 다음의 호출은 캐시에서 결과를 반환
또한 파일 내에서 코드를 실행할 가능성이 있으므로 절대 제어 하의 로컬 파일에만이 파일을 사용해야합니다.
답변
사용할 수 있습니다JSON.parse()
.
ECMAScript 5 호환 JavaScript 구현 에서 JSON
객체 를 사용할 수 있어야합니다 . 그리고 Node.js가 구축되는 V8도 그중 하나입니다.
참고 : 민감한 정보 (예 : 비밀번호)를 저장하기 위해 JSON 파일을 사용하는 경우 잘못된 방법입니다. Heroku가 어떻게 작동하는지 확인하십시오 : https://devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-deployed-application . 플랫폼이 어떻게 작동하는지 알아보고
process.env
코드 내에서 구성 변수를 검색하는 데 사용 하십시오.
JSON 데이터를 포함하는 문자열 파싱
var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);
JSON 데이터를 포함하는 파일 파싱
fs
모듈로 일부 파일 작업을 수행해야 합니다.
비동기 버전
var fs = require('fs');
fs.readFile('/path/to/file.json', 'utf8', function (err, data) {
if (err) throw err; // we'll not consider error handling for now
var obj = JSON.parse(data);
});
동기식 버전
var fs = require('fs');
var json = JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8'));
사용하고 싶 require
습니까? 다시 생각 해봐!
var obj = require('path/to/file.json');
그러나 여러 가지 이유로 이것을 권장하지 않습니다.
require
동기식입니다. 매우 큰 JSON 파일이 있으면 이벤트 루프가 질식됩니다.JSON.parse
와 함께 사용해야 합니다fs.readFile
.require
파일을 한 번만 읽습니다 .require
동일한 파일 에 대한 후속 호출 은 캐시 된 사본을 리턴합니다..json
지속적으로 업데이트 되는 파일 을 읽으려는 경우 좋지 않습니다. 당신은 핵을 사용할 수 있습니다 . 그러나이 시점에서 간단히 사용하는 것이 더 쉽습니다fs
.- 파일
.json
확장자require
가 없으면 파일 내용을 JSON으로 처리하지 않습니다.
진심으로! 사용하십시오JSON.parse
.
load-json-file
구성 단위
많은 수의 .json
파일을 읽는 경우 (그리고 매우 게으른 경우) 매번 상용구 코드를 작성하는 것이 성가 시게됩니다. load-json-file
모듈 을 사용하여 일부 문자를 저장할 수 있습니다 .
const loadJsonFile = require('load-json-file');
비동기 버전
loadJsonFile('/path/to/file.json').then(json => {
// `json` contains the parsed object
});
동기식 버전
let obj = loadJsonFile.sync('/path/to/file.json');
스트림에서 JSON 파싱
JSON 컨텐츠가 네트워크를 통해 스트리밍되는 경우 스트리밍 JSON 구문 분석기를 사용해야합니다. 그렇지 않으면 프로세서를 묶고 JSON 콘텐츠가 완전히 스트리밍 될 때까지 이벤트 루프를 질식시킵니다.
이를 위해 NPM 에서 사용할 수있는 패키지 가 많이 있습니다 . 가장 적합한 것을 선택하십시오.
오류 처리 / 보안
전달 된 JSON.parse()
것이 유효한 JSON 인지 확실하지 않은 경우 호출을 블록 JSON.parse()
안에 넣어야합니다 try/catch
. 사용자가 제공 한 JSON 문자열은 응용 프로그램을 중단시키고 보안 허점으로 이어질 수 있습니다. 외부 제공 JSON을 구문 분석하는 경우 오류 처리가 수행되었는지 확인하십시오.
답변
JSON 객체를 사용하십시오 .
JSON.parse(str);
답변
JSON.parse의 또 다른 예 :
var fs = require('fs');
var file = __dirname + '/config.json';
fs.readFile(file, 'utf8', function (err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
data = JSON.parse(data);
console.dir(data);
});
답변
글로벌 JSON 객체에 대한 대안이 있다고 언급하고 싶습니다.
JSON.parse
그리고 JSON.stringify
당신이 비동기 JSON 모듈의 일부를 체크 아웃 할 수있는 큰 개체를 처리 할 그렇다면, 동기식입니다.
: 봐 가지고 https://github.com/joyent/node/wiki/Modules#wiki-parsers-json을
답변
node-fs
라이브러리를 포함하십시오 .
var fs = require("fs");
var file = JSON.parse(fs.readFileSync("./PATH/data.json", "utf8"));
‘fs’라이브러리에 대한 자세한 내용은 http://nodejs.org/api/fs.html 의 설명서를 참조하십시오.