首页 > 解决方案 > 需要单行显示 JSON 数据,可读性强

问题描述

我使用这个库制作了一个简单的控制台样式 scorebot,它输出 CS:GO 实时比赛的日志(例如,碎片、助攻、连接到服务器的玩家),我制作了这个代码,以 JSON 样式对象输出所有日志:

const HLTV = require('hltv').default
HLTV.connectToScorebot({

    id: 2349500,
    onLogUpdate: (data) => {

        console.log(data.log)
    }

})

并且控制台的输出是很多这样的日志,这是正确的:

[
  {
    Kill: {
      killerName: 'kr1vda',
      killerNick: 'kr1vda',
      killerSide: 'TERRORIST',
      victimNick: 'nonick',
      victimName: 'nonick',
      victimSide: 'CT',
      weapon: 'ak47',
      headShot: true,
      eventId: 2151088609,
      victimX: -1728,
      victimY: -1182,
      killerX: -1861,
      killerY: -1165,
      killerId: -1,
      victimId: 10732
    }
  }
]

但我想有一个单行输出,比如“PlayerX 用 ak47 杀死了 PlayerY”,所以我做了这个:

const HLTV = require('hltv').default
HLTV.connectToScorebot({

    id: 2349500,
    onLogUpdate: (data, done) => {
        const event = Object.keys(data)[0]
        const eventData = data[event]

        if (event === 'Kill') {
            console.log(`${eventData.killerNick} killed ${eventData.victimNick} using ${eventData.weapon}`)
        }
    }
})

当发生杀死时,它应该打印一个单行字符串,但是输出不是空的,而是什么都没有显示。我知道这并不难,但我不是专家,如果有人能帮我解决这个问题,我将不胜感激。谢谢

标签: javascriptnode.jssockets

解决方案


您需要从 data.log 中获取事件

const HLTV = require('hltv').default
HLTV.connectToScorebot({

    id: 2349500,
    onLogUpdate: (data, done) => {
        const event = Object.keys(data.log[0])[0]
        const eventData = data.log[0][event]

        if (event === 'Kill') {
            console.log(`${eventData.killerNick} killed ${eventData.victimNick} using ${eventData.weapon}`)
        }
    }
})

推荐阅读