根据不同键的值将JSON值分配给变量

时间:2018-01-08 13:48:12

标签: json node.js

我有这个函数用于从两个JSON对象中提取时间戳:

lineReader.on('line', function (line) {
    var obj = JSON.parse(line);
    if(obj.Event == "SparkListenerApplicationStart" || obj.Event == "SparkListenerApplicationEnd") {
        console.log('Line from file:', obj.Timestamp);
    }
});

JSON来自日志文件(不是JSON),其中每一行代表日志中的一个条目,每一行也恰好是JSON格式。

这两个对象代表作业的开始和结束。这些可以通过事件键(SparkListenerApplicationStart和SparkListenerApplicationEnd)来识别。它们都包含时间戳键。我想从开始时间中减去结束时间以获得持续时间。

我的想法是将来自JSON的时间戳分配给一个变量,其中将事件键= SparkListenerApplicationEart的JSON分配给另一个变量,并将另一个变量中的一个变量减去一个变量。我怎样才能做到这一点?我知道我不能做任何事情:

var startTime = if(obj.Event == "SparkListenerApplicationStart"){
    return obj.Timestamp;
}

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解,但如果正在阅读行并希望得到每行的Timestamp,我会重新写一个新对象;

const collection = []

lineReader.on('line', function (line) {
    var obj = JSON.parse(line);
    if(obj.Event == "SparkListenerApplicationStart" || obj.Event == "SparkListenerApplicationEnd") {
        // console.log('Line from file:', obj.Timestamp);
        collection.push(obj.Timestamp)
    }
});

console.log(collection);

collection可以是LocalStorage,Global Variable或类似内容。

其他信息 关于我在哪里查询如何识别开始和结束时间的评论,我最终将start设置为最小值并结束为最大值。这是我的最终代码:

const collection = []

lineReader.on('line', function (line) {
    var obj = JSON.parse(line);
    if((obj.Event == "SparkListenerApplicationStart" || obj.Event == "SparkListenerApplicationEnd")) {
        collection.push(obj.Timestamp);
        if(collection.length == 2){
            startTime = Math.min.apply(null, collection);
            finishTime = Math.max.apply(null, collection);
            duration = finishTime - startTime;
            console.log(duration);
        }
    }
});