your programing

node.js를 사용하여 JSON을 통한 루프

lovepro 2023. 4. 2. 12:37
반응형

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

반응형