繁体   English   中英

从JavaScript循环创建的对象,如何在json中分析它们

[英]Object created from a loop in JavaScript, how to analyse them in a json

我是Javascript的初学者,我需要分析循环中生成的JavaScript对象以保留一个参数,并为循环中生成的所有对象保存此参数。

这是我的计划

var onvif = require('onvif');
var fs = require('fs');

var nombrecamera=0;
var taille=0;
var test ='';

function sleep (time) {
    return new Promise((resolve) => setTimeout(resolve, time));
}

var STREAM = fs.createWriteStream('STREAM.txt',{flags:'r+'});

onvif.Discovery.on('device', function(cam,rinfo,xml){
    // function will be called as soon as NVT responses
    nombrecamera+=1;
    console.log(cam);
    test += cam;
    cam2= JSON.stringify({cam}, null  , ' ');
    //console.log(cam2);
    STREAM.write(cam2);
    console.log(test);
});

onvif.Discovery.probe({timeout:1000,resolve:false});

在我的示例输出中,我有4个:

{ probeMatches:
   { probeMatch:
      { endpointReference: [Object],
        types: 'tdn:NetworkVideoTransmitter',
        scopes: ' onvif://www.onvif.org/type/video_encoder     onvif://www.onvif.org/location/country/china onvif://www.onvif.org/type/network_video_transmitter onvif://www.onvif.org/hardware/IPC-122     onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/name/IPC-BO',
        XAddrs: 'http://192.168.1.81:10004/onvif/device_service',
        metadataVersion: 1 
      } 
   } 
}

我想只为生成的所有对象保留XAddrs,然后将它们放在json中。

我的第一个想法是对该对象进行字符串化然后创建一个可写流并将所有json放在一起,但在这种情况下,json之间没有昏迷,所以它不会创建一个包含整个数据的大json。

谢谢您的帮助

儒勒

知道你有多少地址的最简单方法是数组的.length函数。

由于我不知道您是否需要具有唯一地址的列表或同一地址可以多次出现,我将向您展示这两种解决方案。

仅限唯一地址

function extract() {
    test.forEach(cam => {
       const deviceAddress = cam.probeMatches.probeMatch.XAddrs;

       // only if the xaddrs is not in list yet, add it
       if(test.filter(xad => xad === deviceAddress).length <= 0) {
           xaddrs.push(cam.probeMatches.probeMatch.XAddrs);
       }
    }); 

    // show the number of addresses
    const listCount = xaddrs.length;
    console.log('listCount: ', listCount);
}

没有唯一的地址

function extract() {
    test.forEach(cam => {
       xaddrs.push(cam.probeMatches.probeMatch.XAddrs);
    }); 

    // show the number of addresses
    const listCount = xaddrs.length;
    console.log('listCount: ', listCount);
}

使test成为一个数组并将cam对象push() 还为XAddrs值定义一个数组。

var test = [];
var xaddrs = [];

// your other code
...

onvif.Discovery.on('device', function(cam,rinfo,xml){
    // function will be called as soon as NVT responses
    nombrecamera+=1;
    console.log(cam);

    // push cam object into array
    test.push(cam);

    cam2= JSON.stringify({cam}, null  , ' ');
    //console.log(cam2);
    STREAM.write(cam2);
    console.log(test);
});

然后提取XAddrs并将其推入xaddrs数组。

function extract() {
    test.forEach(cam => {
       xaddrs.push(cam.probeMatches.probeMatch.XAddrs);
    }); 

    // now you have an array containing only the XAddrs elements
    console.log(xaddrs);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM