node.js를 사용하여 JSON을 통한 루프
아래와 같이 JSON 파일을 반복해야 합니다.
{
"device_id": "8020",
"data": [{
"Timestamp": "04-29-11 05:22:39 pm",
"Start_Value": 0.02,
"Abstract": 18.60,
"Editor": 65.20
}, {
"Timestamp": "04-29-11 04:22:39 pm",
"End_Value": 22.22,
"Text": 8.65,
"Common": 1.10,
"Editable": "true",
"Insert": 6.0
}]
}
데이터의 키는 항상 동일하지는 않습니다(예시를 사용한 지 얼마 되지 않아 20개의 다른 키가 있습니다).따라서 값을 얻기 위해 그것들을 정적으로 참조하도록 스크립트를 설정할 수 없습니다.
그렇지 않으면 내가 말할 수 있다.
var value1 = json.data.Timestamp;
var value2 = json.data.Start_Value;
var value3 = json.data.Abstract;
etc
과거에 데이터 노드에 간단한 포어치 루프를 사용했는데...
foreach ($json->data as $key => $val) {
switch($key) {
case 'Timestamp':
//do this;
case: 'Start_Value':
//do this
}
}
하지만 스크립트를 차단하고 싶지는 않습니다.좋은 생각 있어요?
다음과 같이 JavaScript 개체를 반복할 수 있습니다.
for(var attributename in myobject){
console.log(attributename+": "+myobject[attributename]);
}
myobject는 json.data일 수 있습니다.
이 노드의 장점을 활용할 것을 권장합니다.JS는 항상 ES5입니다.언어 구현의 안정성에 의존할 수 있는 브라우저 담당자는 아닙니다.시제품 체인의 깊은 재귀가 필요한 경우를 제외하고는 nodeJS에서 for-in 루프를 사용하지 않는 것이 좋습니다.단순하고 기존의 루핑에서는 오브젝트를 잘 활용할 것을 권장합니다.키 방식, ES5에서.다음 JSPerf 테스트를 참조할 경우, 특히 Chrome을 사용하는 경우(노드와 엔진이 같기 때문에)JS)를 사용하면 for-in-loop(대략 10배 빠름)을 사용하는 것보다 이 방법을 사용하는 것이 얼마나 더 뛰어난지 대략적으로 알 수 있습니다.다음은 코드의 예입니다.
var keys = Object.keys( obj );
for( var i = 0,length = keys.length; i < length; i++ ) {
obj[ keys[ i ] ];
}
루프에서 hasOwnProperty를 사용할 수도 있습니다.
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
switch (prop) {
// obj[prop] has the value
}
}
}
node.displays는 싱글 스레드입니다.즉, 스크립트는 원하는지 아닌지를 차단합니다.V8(node.js가 사용하는 Google의 Javascript 엔진)은 Javascript를 기계어로 컴파일합니다.이는 대부분의 기본 조작이 매우 빠르고 100개의 키를 가진 개체를 통해 루프하는 데 몇 나노초가 걸린다는 것을 의미합니다.
그러나 루프 내부에서 더 많은 작업을 수행하고 있으며 지금 당장 차단하지 않으려면 다음과 같은 작업을 수행할 수 있습니다.
switch (prop) {
case 'Timestamp':
setTimeout(function() { ... }, 5);
break;
case 'Start_Value':
setTimeout(function() { ... }, 10);
break;
}
루프가 CPU 부하가 높은 작업을 하고 있는 경우는, 그 작업을 실시하기 위한 자프로세스를 생성하거나 Web 워커를 사용할 필요가 있습니다.
매우 큰 루프에만 필요한 블로킹을 회피하려면 루프 내용을 다음과 같은 함수로 랩합니다.process.nextTick(function(){<contents of loop>})
그러면 다음 틱까지 실행이 지연되어 다른 비동기 함수로부터의 보류 중인 콜이 처리될 가능성이 생깁니다.
제가 가장 선호하는 방법은
var objectKeysArray = Object.keys(yourJsonObj)
objectKeysArray.forEach(function(objKey) {
var objValue = yourJsonObj[objKey]
})
nodeJ 를 사용하고 있는 경우는, 반드시 nodeJ 가 제공하는 다양한 라이브러리를 활용할 필요가 있습니다.각(), map(), reduce() 등의 함수가 언더스코어에서 삽입되어 있습니다.JS는 우리의 노력을 줄인다.여기 샘플이 있습니다.
var _=require("underscore");
var fs=require("fs");
var jsonObject=JSON.parse(fs.readFileSync('YourJson.json', 'utf8'));
_.map( jsonObject, function(content) {
_.map(content,function(data){
if(data.Timestamp)
console.log(data.Timestamp)
})
})
조금 늦었지만 아래에 좀 더 명확히 해 줄 수 있을 것 같습니다.
간단한 루프를 사용하여 다음과 같이 JSON 어레이를 반복할 수도 있습니다.
for(var i = 0; i < jsonArray.length; i++)
{
console.log(jsonArray[i].attributename);
}
JSON 오브젝트가 있고 그 모든 내부 오브젝트를 루프하려면 먼저 어레이 내의 모든 키를 가져와 다음과 같은 키 이름을 사용하여 오브젝트를 취득하기 위해 키를 루프해야 합니다.
var keys = Object.keys(jsonObject);
for(var i = 0; i < keys.length; i++)
{
var key = keys[i];
console.log(jsonObject.key.attributename);
}
도움이 될지는 모르겠지만, 여기서 호스트하는 노드에 비동기 반복을 위한 라이브러리가 있는 것 같습니다.
https://github.com/caolan/asynchttps.com/caolan/async
Async는 비동기 JavaScript를 사용하기 위한 간단하고 강력한 기능을 제공하는 유틸리티 모듈입니다.원래 node.js와 함께 사용하도록 설계되었지만 브라우저에서 직접 사용할 수도 있습니다.
Async는 일반적인 '기능' 의심 기능(맵, 축소, 필터, 각 기능)과 비동기 제어 흐름(병렬, 직렬, 폭포 등)에 대한 몇 가지 일반적인 패턴을 포함하는 약 20개의 기능을 제공합니다.이러한 함수는 모두 비동기 함수의 마지막 인수로 단일 콜백을 제공하는 node.js 규칙을 따르는 것을 전제로 합니다.
Travers를 보세요.오브젝트 트리를 재귀적으로 기동하여 액세스 할 수 있는 다수의 다른 오브젝트를 각 노드에서 가지고 있습니다.예를 들어 현재 노드의 키, 현재 노드의 부모, 현재 노드의 풀키 패스 등입니다.https://github.com/substack/js-traverse원형 참조를 스크럽하고 싶은 오브젝트나 다양한 데이터 비트를 변환하면서 딥 클론을 작성해야 할 때 효과적으로 사용하고 있습니다.여기 샘플에서 추출한 코드가 있습니다. 이 코드를 통해 어떤 기능을 하는지 알 수 있습니다.
var id = 54;
var callbacks = {};
var obj = { moo : function () {}, foo : [2,3,4, function () {}] };
var scrubbed = traverse(obj).map(function (x) {
if (typeof x === 'function') {
callbacks[id] = { id : id, f : x, path : this.path };
this.update('[Function]');
id++;
}
});
console.dir(scrubbed);
console.dir(callbacks);
언급URL : https://stackoverflow.com/questions/5829007/looping-through-json-with-node-js
'your programing' 카테고리의 다른 글
Serde를 사용하여 JSON을 최상위 어레이로 역직렬화하려면 어떻게 해야 합니까? (0) | 2023.04.02 |
---|---|
jq를 사용하여 임의의 단순 JSON을 CSV로 변환하려면 어떻게 해야 합니까? (0) | 2023.04.02 |
SELECT 문에서 BOUAL 유형을 사용하는 방법 (0) | 2023.04.02 |
각지다.JS: 동일한 컨트롤러를 공유하는 뷰, 뷰 변경 시 모델 (0) | 2023.04.02 |
WooCommerce 함수에 WP/WC 인수 누락 (0) | 2023.04.02 |