[javascript] Node.js를 사용하여 JSON을 구문 분석하는 방법은 무엇입니까?

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습니까? 다시 생각 해봐!

때로는 다음을 사용할 수 있습니다require .

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

그러나 여러 가지 이유로 이것을 권장하지 않습니다.

  1. require동기식입니다. 매우 큰 JSON 파일이 있으면 이벤트 루프가 질식됩니다. JSON.parse와 함께 사용해야 합니다 fs.readFile.
  2. require파일을 한 번만 읽습니다 . require동일한 파일 에 대한 후속 호출 은 캐시 된 사본을 리턴합니다. .json지속적으로 업데이트 되는 파일 을 읽으려는 경우 좋지 않습니다. 당신은 핵을 사용할 수 있습니다 . 그러나이 시점에서 간단히 사용하는 것이 더 쉽습니다 fs.
  3. 파일 .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 의 설명서를 참조하십시오.