제가 JSON 구문 분석 방법을 사용하여 node. js? 일부 모듈에서는 검증 및 구문 분석 JSON 안전하게 하는 것 있나요?
['제슨스파스'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) 간단히 사용할 수 있습니다.
정의를 '' 객체를 JSON [산은 ECMAScript 5 사양명세] (http://es5.github.com/ # x15.12). # 39 의 [V8] Chrome& 편차란 node. js 구글 (https://developers.google.com/v8/) 엔진, 이 기술을 기반으로 하는 ECMA 표준. 따라서 node. js 도 노드전역 객체에는 , [docs] ',' JSON < sup> /sup> <;.
참고 - ['제슨스파스'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) 까지 수 있기 때문에 현재 타이법으로요 스레드할 동기식 메서드입니다. 그래서 스트리밍 파서를 사용할 경우 구문 분석 대량량 JSON 객체에는 json 계획하고 있다.
[필요한] [1] .j슨 파일을 수 있습니다.
var parsedJSON = require('./file-name');
예를 들어 있는 경우 '소스 코드 파일이 사용하는 것과 같은 디렉토리에 콘피g.j슨' file:
var config = require('./config.json');
또는 (파일 확장자 생략해야 수):
var config = require('./config');
'할 수 있는 유일한' 는 다음과 같은 파일 once _note synchronous 판독합니다 반품해야 페이징됩니다 cache_ 결과,
로컬 파일 제어 밑에 상대경로를 also 참고 있는 경우에만 사용할 수 있기 때문에 이 실행하므로 file. 내의 모든 코드
[1]: http://nodejs.org/api/modules.html # modules_module_require_id
'모든' 객체를 JSON 사용할 수 있어야 합니다 [ECMAScript 5] [2] 호환적 JavaScript 구축상의. 3 및 [V8] 하는 것을 편차란 node. js 는 그 희망이었네
>. 참고: # 39 를 사용하는 경우, re you& JSON 파일을 저장할 수 있는 민감한 정보 (예, 비밀번호란), that& # 39, 잘못된 길일 것이다. 헤로쿠 어떻게 보고 있습니까. https://devcenter.heroku.com/articles/config-vars # var 배포시키고 위한 애플리케이션 설정 구성. 플랫폼 및 사용 방법을 찾지 않습니다 ',' 코드 내에서 프로세스드네프 읽어들이려면 구성용 var.
var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);
Json 데이터를 포함하는 파일 # 구문 분석
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'));
var obj = require('path/to/file.json');
하지만, 나는 이 여러 가지 이유로 바람직하지 않습니다.
많은 경우 판독값 .j슨 (있는 경우 매우 게으른) ',' 파일 쓰기 상용구 코드 귀찮게 할 때마다 됩니다. 일부 문자를 사용하여 저장할 수 있습니다. 'json 로드하십시오 파일' 모듈에서는.
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 컨텐츠를 타이법으로요 up your 프로세서 및 경계감소 때까지 완전히 스트림됩니다.
[많은 사용할 수 있는 패키지를 고궁박물원] [7] 이 있습니다. # 39 의 가장 적합한 what& 선택합니다.
있는모든 여부가 확실하지 않으면 전달 하는 제슨스파스 () '가 유효함 JSON', 'a' () '를 호출하는 smartupdate 둘러싸려면 제슨스파스 인사이드라면 시도하시겠습니까 / catch 블록.' Json 사용자는 응용 프로그램을 제공할 수 있으며, 사고 문자열이어야 보안 구멍을 이어질 수도 있습니다. 구문 오류 처리 완료되어도 smartupdate 경우 외부에서 제공 json.
[2]: http://es5.github.com/ # x15.12
[7]: q = json% 20parse% 20stream https://www.npmjs.com/search?
[9]: # comment43497504_9804910 https://stackoverflow.com/questions/5726729/how-to-parse-json-using-node-js/25710749
'' 이 '와' 제슨.스트린그리피 제슨스파스 동기식 도왔으매 스케쳐내 대량량 객체에는 대응하기 위해 일부 비동기적입니다 JSON 모듈에서는 체크아웃하려고 할 수 있습니다.
투명지에 여바바: https://github.com/joyent/node/wiki/Modules # wiki 파서 json
'포함시키십시오 노드입니다 fs' 라이브러리란.
var fs = require("fs");
var file = JSON.parse(fs.readFileSync("./PATH/data.json", "utf8"));
function tryParseJson(str) {
try {
return JSON.parse(str);
} catch (ex) {
return null;
}
}
비동기 style" 또는 ";
function tryParseJson(str, callback) {
process.nextTick(function () {
try {
callback(null, JSON.parse(str));
} catch (ex) {
callback(ex)
}
})
}
구문 분석 JSON 스트리밍합니다? '' 제슨스트림 사용합니다.
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
}))
여기에 대답을 할 수 있는 것은, 그 밖의 좋습니다 인컨텍스트 로컬 파일 것으로 알고 있는 것처럼, 안전 및 json 구성파일입니다:
var objectFromRequire = require('path/to/my/config.json');
글로벌 JSON 객체에는 객체를 사용하거나 분석할 수 문자열 값이 된다.
var stringContainingJson = '\"json that is obtained from somewhere\"';
var objectFromParse = JSON.parse(stringContainingJson);
단, 필요한 경우에 해당 파일을 파일 컨텐트에서 검사됩니다 보안 위험이 있는 경우에 cxp it& # 39 의 js 파일을 파일 하지만 json 아닙니다.
자, 모두 볼 수 있는 방법 및 플레이 데모가 게시됨에 i& # 39, ve 그들과 함께 온라인 () 는 구문 분석 비유하사 인할지 아프자이스 파일 - 에서 결과를 볼 수 있는 버튼을 눌러 실행하십시오 터미널): http://staging1.codefresh.io/labs/api/env/json-parse-example
코드 수정하십시오 영향을 볼 수 있습니다.
>. 참고: 그 데이터를 (& # 39, ./data.json& # 39;) = 사람들이 자랑합니까 합니다. 는 >. # 39 의 열성 질러스 다운보팅 people& 및 보안 위험이 있는 대답: # 39 와 완전히 잘못된 , you& re 정확히요. >. 그 시도하시겠습니까 json 비사양 배치 파일. , 부여하느뇨 노드입니다 오류가 있습니다 정확히 같은 경우 훨씬 더 느려지고 있는 것 같은 일이 더 열심히 재발했지 코드 수작업식 파일 읽기 후 후속 제슨스파스 (). 애초부터 그만해달라구요 확산되고 있다. # 39, re you& 거들어야죠 아니라 전반적으로 세계 노드입니다 고안되었습니다 이를 허용하는 데 있었다. it 보안 위험이 없는!
대부분의 개발자들이 치료 자사의 서버 및 애플리케이션 구성 것처럼 변경될 수 있습니다. # 39, it can& 없다. 서로 위에 있지만, 더 높은 레이어에는 변경되는지 레이어에는 수 있습니다 # 39, re you& 수정 기본 요건. 몇 가지 수 있었으면 합니다! # 39 구성용 만들 수 있기 때문에, s 는 기본적으로 it& 처럼 행동하는 것처럼 그 일부를 너회의 소스 코드.
네 그런거 많이 바뀌지 않는 것을 볼 수 있습니다 쓰레기 같은 시작 후, t # 39 isn& 안티 패턴을 너회의 구성용 로드중 / catch 블록, 계속할 수 있는 것처럼 위장하는 시도하시겠습니까 너회의 제대로 없이 설치 프로그램을. # 39, t can& 있습니다. 가능하면 구성용 레이어에는 / 사용자 커뮤니티에 속한 서버가 아닌 / app 구성용 레이어에는. # 39, re 그냥 you& 잘못하고 있어. # 39 위 (옵션) 의 응용 프로그램을 마친 부트스트랩에 it& 때 물건을 레이어된 합니다.
정지점을 정도로 머리를 벽에 붙어. 울트라 단순해졌습니다 너회의 구성용 합니다.
얼마나 쉽게 살펴 뭔가 복잡해 포로토콜 가능 datasource 가능 사용하여 설정할 수 있는 간단한 json 프레임워크 및 서비스 구성 파일 및 간단한 아프자이스 절실해졌습니다.
{
"service": {
"type" : "http",
"name" : "login",
"port" : 8085
},
"data": {
"type" : "mysql",
"host" : "localhost",
"user" : "notRoot",
"pass" : "oober1337",
"name" : "connect"
}
}
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); });
module.exports = function(request, response){
response.end('Responding to: ' + request.url);
}
이 패턴을 사용하여, 이제 그 위에 로드형 커뮤니티 및 사용자 구성용 너회의 부트된 애플리케이션 (앱) 을 개발 및 확장성으로 지지 준비 작업에 ops 는 컨테이너로 거잖나. # 39, 멀티 테넌트 you& re 읽음. Userland 는 격리됩니다. 이제 재배케하여 서비스 프로토콜을 사용하여 데이터베이스 우려가 있는 분리하십시오 you& # 39, re, re 사용, 그냥 좋은 코드를 작성하는 데 집중할 you& # 39 유형.
그냥 완료하십시오 오토메이티드 (한동안 어려움을 겪고 있는 it as I), 보여주고 싶은 정보를 담고 있는 이 예제에서와 json 액세스하려면 액세스을 Json 어레이입니다:
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
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);
}
})
끝 - < 스니핏 >;!
그냥 만들기 위해 이 같은 복잡한 가능한 한 많은 패키지를 부를 수 있다.
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);
let data = await readJsonFile("foo.json");
그냥 '는' 를 사용하여 다른 요청을 처리할 수 있는 장점이 있는 반면, 파일 서버 레드필레시누스 너회의 노드입니다 읽는 중입니다 끄기도구 디스크입니다.
// 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
Json 의 문자열 구문 분석 틀렸다니까 제슨스파스 안전을 않습니다. 같은 라리브러리 살펴봐야 합니다 json 안전하다구요 구문 분석 또는 이와 비슷한 라이브러리란.
고궁박물원) 에서 json 안전하다구요 구문 분석 페이지:
>. 하지만, 1 개 중대 결함을 컨텍스트입니다 제슨스파스 훌륭한 JavaScript: 무시하려면 상속됨 특성는 있습니다. 이 경우 문제가 될 수 있는 비신뢰 구문 분석 JSON 의 소스 (예: 사용자) 및 it 에 대한 함수 호출 고객이 기대하는 있어야 합니다.
내가 사용하는 fs 추가. 왜냐하면 비록 맘에들었어요 많이유 汲摹窍妨绰 콜백 - it 는 사실. 내 코드를 읽을 수 있는 방법을 쓸 수 있도록 나를 그냥 보다.
const fs = require('fs-extra');
fs.readJson("path/to/foo.json").then(obj => {
//Do dome stuff with obj
})
.catch(err => {
console.error(err);
});
또한 많은 유용한 방법 fs 와 함께 '표준' 없는 자, 또 그 위에 windows용 모듈을 현재와 미래를 연결하는 방법을 넷윈을 '에서' 모듈 및 프로미시프리스 저들이요 fs
>, 참고: 넷윈을 node. js 메서드을 계속 사용할 수 있습니다. 이들은 프로미시프리드 및 복사됨 fs 추가 끝났다. () '에' 펠릭스 스트레이트 & 주 참조). '프스트라이트 ()'
그래서 it& # 39 에 기본적으로 모든 장이점이. 이 때 다른 찾기 바란다.