首页 > 解决方案 > 将所有传入的 JSON 消息存储在数组中并使用 javascript 检索

问题描述

我的应用程序每 10 分钟从另一个应用程序接收 JSON 数据。我需要存储传入的 JSON 消息以及何时收到新消息。我需要根据来自这两个消息的数据进行比较和计算。我该怎么做?

我试过这样(只是测试 - 不是用实际数据):

var inputData = []
inputData = JSON.stringify(data1)
jsonArray.push(inputData)
var jsonArray = []
inputData = JSON.stringify(data2)
jsonArray.push(inputData)

for (var i = 0; i < jsonArray.length; i++) {
        jsonData = JSON.parse(jsonArray[i])
        if ((data3.x === jsonData.x))
        {    
            document.write("\n")
            document.write(jsonData.x);
        }
}

但我的问题是,每当有新消息进入时,都会调用此模块并对其jsonArray进行初始化。那么,当新消息到来时,我们如何使模块中的数组或(以前的 JSON 消息)可用?我需要在代码中有第二个数组吗?非常感谢你的帮助。

这是传入消息的示例:

data1 = {"Battery":4.28,"moisture":15.88,"temperature":28,"messageType":"MOIST_TEMP","deviceId":"A371A","timestamp":"2019-12-02T02:53:25.000Z"}

标签: javascriptarraysjson

解决方案


我认为你可以这样做希望这有帮助

//Suppose the Incoming Message is this
let incomingMessage = { "Battery": 9.780, "moisture": 75.88, "temperature": 36, "messageType": "MOIST_TEMP", "deviceId": "A371A", "timestamp": "2019-12-02T02:53:25.000Z" }

// The JsonArray you have right Now which stores the incoming Message
let jsonArray = [
    { "Battery": 4.28, "moisture": 15.88, "temperature": 28, "messageType": "MOIST_TEMP", "deviceId": "A371A", "timestamp": "2019-12-02T02:53:25.000Z" },
    { "Battery": 9.00, "moisture": 77.88, "temperature": 32, "messageType": "MOIST_TEMP", "deviceId": "A371A", "timestamp": "2019-12-02T02:53:25.000Z" },
    { "Battery": 4.28, "moisture": 15.88, "temperature": 28, "messageType": "MOIST_TEMP", "deviceId": "A371A", "timestamp": "2019-12-02T02:53:25.000Z" }
]

let isExist = []

//check that incoming message exits in the jsonArray 
for (let i = 0; i < jsonArray.length; i++) {
    let found = true;
    for (let p in incomingMessage) {
        if (incomingMessage.hasOwnProperty(p)) {
            if (jsonArray[i][p] !== incomingMessage[p]) {
                found = false;
                break;
            }
        }
    }
    isExist.push(found)
}
//Push if Incoming message doesn't exist
if(isExist.indexOf(true)<=-1){
 jsonArray.push(incomingMessage)
}
console.log(jsonArray)


推荐阅读