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


971

Node.js를 사용하여 JSON을 어떻게 구문 분석해야합니까? JSON의 유효성을 검사하고 구문 분석하는 모듈이 있습니까?

답변:


1099

간단하게 사용할 수 있습니다 JSON.parse.

JSON객체 의 정의 는 ECMAScript 5 사양의 일부입니다 . node.js는 ECMA 표준을 준수하는 Chrome의 V8 엔진을 기반으로합니다. 따라서 node.js에는 전역 객체 [docs]도 있습니다.JSON

주 – JSON.parse현재 스레드는 동기식이기 때문에 묶을 수 있습니다. 따라서 큰 JSON 객체를 구문 분석하려는 경우 스트리밍 json 파서를 사용하십시오.


공식 문서에없는 이유를 아는 사람이 있습니까? 아니면, 어디서 찾을 수 있습니까?
snapfractalpop

34
@snapfractalpop :이 문서는 node.js의 일부인 함수 등 만 설명합니다. 표준 JavaScript 기능은 V8의 일부이며 node.js가 기본으로 제공됩니다. 이에 따라 답변을 업데이트했습니다.
Felix Kling

1
@FelixKling 그 가치가있는 것을 위해, 노드의 github wiki에는 많은 것들이 있습니다 : github.com/joyent/node/wiki/…
damianb

여기,이 답변을 온라인으로보고 재생할 수있는 데모를 게시했습니다 (구문 분석 예제는 app.js 파일에 있습니다-실행 버튼을 클릭하고 터미널에서 결과를보십시오) : 링크 코드를 수정할 수 있습니다 영향을 참조하십시오 ...
nathan g

귀하의 답변에는 JavaScript 구문에 대한 사전 지식이 필요합니다. 사용법 예제를 표시하는 것이 얼마나 어려울까요? JSON.parse (str); //
멍청

661

.json 파일 이 필요할 수 있습니다.

var parsedJSON = require('./file-name');

예를 들어 config.json소스 코드 파일과 동일한 디렉토리에 파일 이있는 경우 다음을 사용합니다.

var config = require('./config.json');

또는 (파일 확장자는 생략 할 수 있습니다) :

var config = require('./config');

참고 require동기 만 파일을 읽고 한 번은 , 다음의 호출은 캐시에서 결과를 반환

또한 파일 내에서 코드를 실행할 가능성이 있으므로 절대 제어 하의 로컬 파일에만이 파일을 사용해야합니다.


4
이 방법을 사용하여 파일을 구문 분석하는 경우 요구에 대한 경로를 고려해야합니다. 예를 들어, './file-name-with-no-extension'필요 (예 : 파일이 현재 디렉토리에있는 경우)
SnapShot

94
응답이 캐시됩니다. 예를 들어 위에 함수를 호출하고 함수를 호출하고 JSON 파일을 변경 한 후 함수를 다시 호출하면 이전 버전의 JSON 파일을 얻게 됩니다. 나를 몇번이나 잡아냈다!
벤 클레이튼

15
또한 require동기식입니다. 당신은 쉬운 사용을 비동기하려면 fs.readFile대신에JSON.parse
에반 모란

29
이 접근법은 파일을 JavaScript로 취급하여 .json 파일에서 임의의 코드를 실행할 가능성이 있습니까?
d11wtq

15
간단한 참고 사항 : .json확장명 을 사용하는 것을 잊지 마십시오 ! 파일의 .json확장자가 없으면 require는 파일을 json 파일로 취급하지 않습니다.
Jason

323

사용할 수 있습니다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을 구문 분석하는 경우 오류 처리가 수행되었는지 확인하십시오.


2
and could even lead to security holes호기심에서 어떻게?
natario

6
@ natario : 우리는 여기서 서버 측 JS에 대해 이야기하고 있습니다. 누군가가 사용자 제공 JSON을 구문 분석한다고 가정하십시오. JSON이 항상 구성되어 있다고 가정하면 공격자는 잘못된 형식의 JSON을 전송하여 오류를 트리거 할 수 있습니다. 클라이언트 측에 유출 된 경우 시스템에 대한 중요한 정보가 표시 될 수 있습니다. 또는 JSON이 잘못 구성되어 있고 텍스트가 일부 포함 <script>...되어 있고 오류가 클라이언트 측에 유출되면 XSS 버그가있는 것입니다. 따라서 IMO는 구문 분석하는 곳에서 JSON 오류를 처리하는 것이 중요합니다.
sampathsris

1
@NickSteele : 그러나 "권장하지 않음"을 "권장하지 않음"으로 변경했습니다. 나는 당신이 지금 행복하기를 바랍니다.
sampathsris

1
@ NickSteele : 내가 나열된 결함을 감안할 때 잘 설계된 기능 이라고 생각하지 않습니다 . 어떤 사람들은 "이봐, requireJSON을 포함 시키는 것이 멋지지 않을까?" 라고 생각한 것 같습니다. 부작용을 문서화하지 않아도됩니다. 이것은 또한 JavaScript와 JSON이라는 두 가지 언어로 된 파일을 필요로한다는 것을 의미했습니다 (동일하지 않음). SRP를 위해 너무 많은.
sampathsris

1
@ NickSteele : 예, 구성에서만 작동합니다. 그러나 JSON은 구성에만 사용되지 않습니다.
sampathsris

85

JSON 객체를 사용하십시오 .

JSON.parse(str);

12
이것은 최고 답변을 복제합니다. 삭제를 고려하십시오. 당신은 포인트를 유지합니다.
Dan Dascalescu

6
이 답변에는 50 개의 공감대가 있습니다. 1 % 규칙 에 따르면 아마도 5000 명의 사용자가이 답변을 읽는 데 시간을 보냈을 것입니다. 3 살이라는 사실만으로도 문제가 악화됩니다. :
Dan Dascalescu

16
@DanDascalescu-알다시피, 두 답변은 3 년 전에 정확히 같은 시간에 게시되었습니다. 둘 다 동일한 정보를 제공합니다. 이것은 너무나도 마찬가지입니다. 나는 대답의 절반이 받아 들여지지 않았기 때문에 대답의 절반을 컬링하려고하지 않습니다.
Mark Kahn

8
나는이 일련의 의견이 상당히 흥미 롭다는 것을 알았지 만 대답 자체는 내 시간을 낭비하는 것입니다. ... 댓글 스레드를 보지 못했기 때문에 답변을 삭제해야한다는 것을 확신하지 못합니다. 그러나 그렇지 않으면 나는 그렇습니다.
MalcolmOcean

7
@ DanDascalescu, 나는이 대답이 분명하고 명확하다고 믿습니다. 허용되는 예제는 사용법 예제를 제공하지 않으며 많은 링크와 추가 항목으로 인해 혼란스러워합니다.
andresgottlieb

37

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

2
이 접근법은 json 파일이 응용 프로그램에 로컬 일 필요는 없다는 것을 좋아합니다. 감사합니다!
Charles Brandt

35

글로벌 JSON 객체에 대한 대안이 있다고 언급하고 싶습니다. JSON.parse그리고 JSON.stringify당신이 비동기 JSON 모듈의 일부를 체크 아웃 할 수있는 큰 개체를 처리 할 그렇다면, 동기식입니다.

: 봐 가지고 https://github.com/joyent/node/wiki/Modules#wiki-parsers-json을


1
들어오는 연결에서 JSON 데이터가 필요한 경우 특히 그렇습니다. JSON.parse전체 애플리케이션에서 잘못된 JSON을 구문 분석하는 중이 발생하거나을 (를 ) 사용하는 process.on('uncaughtException', function(err) { ... });경우 결국 "잘못된 JSON"오류를 사용자에게 보낼 기회가 없습니다.
Paul

3
어느 것이 async파서입니까? 나는 그것을 찾지 못했다.
bxshi

3
링크 된 페이지는 이제 "DEPRECATED"로 표시되고 "페이드 드 유물"로 설명됩니다.
아무도

30

node-fs라이브러리를 포함하십시오 .

var fs = require("fs");
var file = JSON.parse(fs.readFileSync("./PATH/data.json", "utf8"));

'fs'라이브러리에 대한 자세한 내용은 http://nodejs.org/api/fs.html 의 설명서를 참조하십시오.


2
JSON을 구문 분석하지 못하거나 파일이 존재하지 않는 경우 var 파일 라인을 try / catch로 감싸 야한다는 점에 주목할 가치가 있습니다.
Fostah

3
아니면 그냥 콜백을 사용하십시오!
lawx

10

문자열이 실제로 유효한지 알지 못하므로 먼저 시도 catch에 넣습니다. 또한 try catch 블록은 노드별로 최적화되지 않았으므로 전체 기능을 다른 함수에 넣습니다.

function tryParseJson(str) {
    try {
        return JSON.parse(str);
    } catch (ex) {
        return null;
    }
}

또는 "비동기 스타일"

function tryParseJson(str, callback) {
    process.nextTick(function () {
      try {
          callback(null, JSON.parse(str));
      } catch (ex) {
          callback(ex)
      }
    })
}

2
process.nextTick이 aysnc가 아니라는 점에 유의하고 싶습니다. JS 이벤트 루프에서 다음 함수 호출까지 파일을 읽지 않습니다. JSON.parse를 비동기식으로 실행하려면 기본 Node.js 스레드와 다른 스레드를 사용합니다
Alexander Mills

9

JSON 스트림을 파싱 하시겠습니까? 사용하십시오 JSONStream.

var request = require('request')
  , JSONStream = require('JSONStream')

request({url: 'http://isaacs.couchone.com/registry/_all_docs'})
    .pipe(JSONStream.parse('rows.*'))
    .pipe(es.mapSync(function (data) {
      return data
    }))

https://github.com/dominictarr/JSONStream


7

여기의 모든 사람들이 JSON.parse에 대해 이야기 했으므로 다른 것을 말할 생각이었습니다. 앱 개발을보다 쉽고 개선하기 위해 많은 미들웨어와 연결 되는 훌륭한 모듈이 있습니다 . 미들웨어 중 하나는 bodyParser 입니다. JSON, html-forms 등을 구문 분석합니다 . JSON 구문 분석 전용 noop에 대한 특정 미들웨어도 있습니다 .

위의 링크를 살펴보면 정말 도움이 될 것입니다.



6

여기에 다른 답변에서 언급했듯이 구성 파일과 같이 안전하고 존재하는 로컬 json 파일이 필요할 수 있습니다.

var objectFromRequire = require('path/to/my/config.json'); 

또는 전역 JSON 객체를 사용하여 문자열 값을 객체로 구문 분석합니다.

var stringContainingJson = '\"json that is obtained from somewhere\"';
var objectFromParse = JSON.parse(stringContainingJson);

파일이 필요할 때 해당 파일의 내용이 평가되므로 json 파일이 아니라 js 파일 인 경우 보안 위험이 발생합니다.

여기에 두 가지 방법을 모두 볼 수 있고 온라인으로 재생할 수있는 데모를 게시했습니다 (구문 분석 예제는 app.js 파일에 있습니다-실행 버튼을 클릭하고 터미널에서 결과를 확인하십시오) : http : // staging1 .codefresh.io / labs / api / env / json-parse-example

코드를 수정하고 그 영향을 볼 수 있습니다 ...


5

Node.js로 구성에 JSON을 사용하십니까? 이것을 읽고 9000 이상의 구성 기술을 얻으십시오 ...

참고 : 데이터를 주장하는 사람들 = require ( './ data.json'); 보안 위험이며 열성적인 열심으로 사람들의 대답을 내리는 것입니다. 당신은 정확하고 완전히 틀 렸습니다 . 해당 파일에 비 JSON을 배치하려고 ... 노드가 당신에게 오류를 제공합니다 정확하게 당신이와 같은 일을 한 경우는 것처럼 많은 코드를 수동 파일 읽기에 느린 열심히하고 이후의 JSON.parse (). 잘못된 정보 확산을 중지하십시오. 당신은 세상을 아프게하고 있습니다. 노드는 이것을 허용 하도록 설계되었습니다 . 보안 위험이 아닙니다!

적절한 응용 프로그램은 3 이상의 구성으로 제공됩니다.

  1. 서버 / 컨테이너 구성
  2. 응용 프로그램 구성
  3. (선택 사항) 테넌트 / 커뮤니티 / 조직 구성
  4. 사용자 설정

대부분의 개발자는 서버 및 앱 구성을 변경 가능한 것처럼 취급합니다. 할 수 없습니다. 당신은 할 수 변경 레이어 서로 상단에 상위 계층에서,하지만 당신은하고 기본 요구 사항을 수정 . 몇 가지 존재 해야 합니다! 일부는 기본적으로 소스 코드와 동일하기 때문에 구성을 불변으로 작동하게하십시오.

시작 후 많은 것들이 변경되지 않는 것을 보지 못하면 try / catch 블록으로 구성 로딩을 중단하고 올바른 설정 응용 프로그램 없이 계속 진행하는 것처럼 안티 패턴으로 이어집니다 . 당신은 할 수 없습니다. 가능하면 서버 / 앱 구성 계층이 아닌 커뮤니티 / 사용자 구성 계층에 속합니다. 당신은 단지 잘못하고 있습니다. 응용 프로그램이 부트 스트랩을 마치면 선택적 항목을 맨 위에 겹쳐 놓아야합니다.

벽에 머리를 대지 마십시오. 설정은 매우 간단 해야합니다 .

간단한 json 구성 파일과 간단한 app.js 파일을 사용하여 프로토콜에 구애받지 않고 데이터 소스에 구애받지 않는 서비스 프레임 워크와 같이 복잡한 것을 설정하는 것이 얼마나 쉬운 지 살펴보십시오 ...

container-config.js ...

{
    "service": {
        "type"  : "http",
        "name"  : "login",
        "port"  : 8085
    },
    "data": {
        "type"  : "mysql",
        "host"  : "localhost",
        "user"  : "notRoot",
        "pass"  : "oober1337",
        "name"  : "connect"
    }
}

index.js ... (모든 것을 구동하는 엔진)

var config      = require('./container-config.json');       // Get our service configuration.
var data        = require(config.data.type);            // Load our data source plugin ('npm install mysql' for mysql).
var service     = require(config.service.type);         // Load our service plugin ('http' is built-in to node).
var processor   = require('./app.js');                  // Load our processor (the code you write).

var connection  = data.createConnection({ host: config.data.host, user: config.data.user, password: config.data.pass, database: config.data.name });
var server      = service.createServer(processor);
connection.connect();
server.listen(config.service.port, function() { console.log("%s service listening on port %s", config.service.type, config.service.port); });

app.js ... (프로토콜에 구애받지 않고 데이터 소스에 구애받지 않는 서비스를 지원하는 코드)

module.exports = function(request, response){
    response.end('Responding to: ' + request.url);
}

이 패턴을 사용하여 이제 부팅 된 앱 위에 커뮤니티 및 사용자 구성 항목을로드 할 수 있습니다. dev ops는 작업을 컨테이너에 넣고 확장 할 수 있습니다. 다중 테넌트를 읽습니다. Userland는 격리되어 있습니다. 사용중인 서비스 프로토콜, 사용중인 데이터베이스 유형에 대한 우려를 분리하고 좋은 코드 작성에만 집중할 수 있습니다.

당신이 레이어를 사용하기 때문에, 당신은 젠장, 내가 어떻게 만들려고하고있다 "걱정, 언제든지 (계층화 설정 개체)에서, 모두를위한 진리의 단일 소스에 의존하고, 모든 단계에서 피할 오류를 검사 할 수 적절한 구성없이 작업 하시겠습니까?!? ".


4

내 해결책 :

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

감사합니다 @eloyesp,이 코드를 사용해 보았지만 TypeError: path must be a string or Buffer오류가 계속 발생 합니다.이 문제를 디버깅하기 시작하는 곳을 알고 있습니까?
GPP

4

대답을 완성하고 싶었습니다 (잠깐 동안 어려움을 겪었습니다) .json 정보에 액세스하는 방법을 보여주고 싶습니다.이 예제는 Json Array에 액세스하는 것을 보여줍니다.

var request = require('request');
request('https://server/run?oper=get_groups_joined_by_user_id&user_id=5111298845048832', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    var jsonArr = JSON.parse(body);
    console.log(jsonArr);
    console.log("group id:" + jsonArr[0].id);
  }
})


3

이것을 가능한 한 복잡하게 만들고 가능한 많은 패키지를 가져 오려면 ...

const fs = require('fs');
const bluebird = require('bluebird');
const _ = require('lodash');
const readTextFile = _.partial(bluebird.promisify(fs.readFile), _, {encoding:'utf8',flag:'r'});
const readJsonFile = filename => readTextFile(filename).then(JSON.parse);

이를 통해 다음을 수행 할 수 있습니다.

var dataPromise = readJsonFile("foo.json");
dataPromise.then(console.log);

또는 async / await를 사용하는 경우 :

let data = await readJsonFile("foo.json");

readFileSync파일을 디스크에서 읽는 동안 노드 서버가 다른 요청을 처리 할 수 ​​있다는 장점 만 있습니다.


2

JSON.parse는 구문 분석중인 json 문자열의 안전을 보장하지 않습니다. json-safe-parse 와 같은 라이브러리 또는 유사한 라이브러리를 봐야 합니다.

json-safe-parse npm 페이지에서 :

JSON.parse는 훌륭하지만 JavaScript와 관련하여 하나의 심각한 결함이 있습니다. 상속 된 속성을 재정의 할 수 있습니다. 신뢰할 수없는 소스 (예 : 사용자)에서 JSON을 구문 분석하고 존재하는 함수를 호출하는 경우 문제가 될 수 있습니다.


2

Lodash의 시도 함수를 활용하여 isError 함수로 처리 할 수있는 오류 객체를 반환합니다.

// Returns an error object on failure
function parseJSON(jsonString) {
   return _.attempt(JSON.parse.bind(null, jsonString));
}


// Example Usage
var goodJson = '{"id":123}';
var badJson = '{id:123}';
var goodResult = parseJSON(goodJson);
var badResult = parseJSON(badJson);

if (_.isError(goodResult)) {
   console.log('goodResult: handle error');
} else {
   console.log('goodResult: continue processing');
}
// > goodResult: continue processing

if (_.isError(badResult)) {
   console.log('badResult: handle error');
} else {
   console.log('badResult: continue processing');
}
// > badResult: handle error

3
추가 한 이유를 설명 할 수 .bind대신 (JSON.parse, STR) _.attempt를 사용
steviejay

2

json에 손상된 데이터가 있으면 노드가 항상 예기치 않은 오류를 발생 시키므로 try catch 블록 에서 JSON.parse를 항상 사용해야하므로 간단한 JSON 대신이 코드를 사용하십시오.

try{
     JSON.parse(data)
}
catch(e){
   throw new Error("data is corrupted")
  }

1

JSON에 주석을 추가하고 후행 쉼표를 허용하려면 아래 구현을 사용할 수 있습니다.

var fs = require('fs');

var data = parseJsData('./message.json');

console.log('[INFO] data:', data);

function parseJsData(filename) {
    var json = fs.readFileSync(filename, 'utf8')
        .replace(/\s*\/\/.+/g, '')
        .replace(/,(\s*\})/g, '}')
    ;
    return JSON.parse(json);
}

"abc": "foo // bar"JSON 과 같은 것이 있으면 제대로 작동하지 않을 수 있습니다 . YMMV입니다.


1

JSON 소스 파일이 꽤 큰 경우 Node.js 8.0의 기본 async / await 접근 방식을 통한 비동기 경로를 다음과 같이 고려할 수 있습니다.

const fs = require('fs')

const fsReadFile = (fileName) => {
    fileName = `${__dirname}/${fileName}`
    return new Promise((resolve, reject) => {
        fs.readFile(fileName, 'utf8', (error, data) => {
            if (!error && data) {
                resolve(data)
            } else {
                reject(error);
            }
        });
    })
}

async function parseJSON(fileName) {
    try {
        return JSON.parse(await fsReadFile(fileName));
    } catch (err) {
        return { Error: `Something has gone wrong: ${err}` };
    }
}

parseJSON('veryBigFile.json')
    .then(res => console.log(res))
    .catch(err => console.log(err))

1

내가 사용 FS-여분 . 콜백을 지원하지만 Promises 도 지원하기 때문에 많이 좋아합니다 . 따라서 코드를 훨씬 더 읽기 쉬운 방식으로 작성할 수 있습니다.

const fs = require('fs-extra');
fs.readJson("path/to/foo.json").then(obj => {
    //Do dome stuff with obj
})
.catch(err => {
    console.error(err);
});

또한 표준 fs모듈 함께 제공되지 않는 유용한 방법이 많이 있으며 그 외에도 기본 fs모듈 의 방법을 연결하여 약속합니다.

참고 : 여전히 기본 Node.js 메소드를 사용할 수 있습니다. 그것들은 약속되어 fs-extra로 복사됩니다. 에 대한 참고 사항을 참조하십시오 fs.read()&를fs.write()

기본적으로 모든 장점입니다. 다른 사람들이 이것을 유용하게 사용하기를 바랍니다.


1

안전한 방법으로 (즉, 사용자가 데이터를 입력하거나 공개 API를 사용할 있음) JSON을 Node.js로 구문 분석해야하는 경우 secure-json-parse를 사용하는 것이 좋습니다 .

사용법은 기본값과 JSON.parse같지만 코드를 다음으로부터 보호합니다.

const badJson = '{ "a": 5, "b": 6, "__proto__": { "x": 7 }, "constructor": {"prototype": {"bar": "baz"} } }'

const infected = JSON.parse(badJson)
console.log(infected.x) // print undefined

const x = Object.assign({}, infected)
console.log(x.x) // print 7

const sjson = require('secure-json-parse')
console.log(sjson.parse(badJson)) // it will throw by default, you can ignore malicious data also

0

JSON.parse () (try-catch 문으로 랩핑 해야하는 내장 함수)을 사용할 수 있습니다.

또는 json-parse-or 와 같은 JSON 구문 분석 npm 라이브러리를 사용하십시오.



0

NodeJsJavaScript 기반 서버이므로 순수한 JavaScript로 그렇게 할 수 있습니다 ...

당신이이 상상 JSON 에서 NodeJs ...

var details = '{ "name": "Alireza Dezfoolian", "netWorth": "$0" }';
var obj = JSON.parse(details);

그리고 당신은 구문 분석 된 json 버전을 얻기 위해 위의 작업을 수행 할 수 있습니다 ...


0

위의 답변에서 언급했듯이 JSON.parse()문자열을 JSON으로 구문 분석하는 데 사용할 수 있지만 구문 분석하기 전에 올바른 데이터를 구문 분석해야합니다. 그렇지 않으면 전체 애플리케이션이 다운 될 수 있습니다

이렇게 사용하는 것이 안전합니다

let parsedObj = {}
try {
    parsedObj = JSON.parse(data);
} catch(e) {
    console.log("Cannot parse because data is not is proper json format")
}

0

사용하십시오 JSON.parse(str);. 자세한 내용은 여기를 참조 하십시오 .

여기 몇 가지 예가 있어요.

var jsonStr = '{"result":true, "count":42}';

obj = JSON.parse(jsonStr);

console.log(obj.count);    // expected output: 42
console.log(obj.result);   // expected output: true

-1

더 이상 모듈이 필요하지 않습니다.
그냥
var parsedObj = JSON.parse(yourObj);
이것에 관한 보안 문제가 있다고 생각합니다


-2

간단합니다.를 사용하여 JSON을 문자열 JSON.stringify(json_obj)로 변환하고 문자열을 JSON을 사용하여 변환 할 수 있습니다JSON.parse("your json string") .


2
이 질문에 대한 최고의 답변을 보셨습니까? 3 살이며 아주 완벽합니다. 여기서 제공하는 사소한 정보로 무엇을 기고하고 싶습니까?
Robby Cornelissen

2
이제, 이중 표준을 유지하지
않겠습니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.