如何从数组构造JSON

问题描述 投票:0回答:1

我正在尝试通过我的Web服务器和Nodemcu控制某些开关。我正在设法连接到我的数据库并读取数据。我想将数据发送回服务器,但我不是如何从数组构造JSON。

这是我的代码:

if(currentMillis - previousMillis >= interval) {
    if ((WiFiMulti.run() == WL_CONNECTED)) {
      outputsState = httpGETRequest(serverName);
      Serial.println("OutputState ( {ID Key:[Switch ID, State, Mode, AlarmON, AlarmOFF,JustChanged]}");
      Serial.println(outputsState);
      Serial.println(" ");

      JSONVar myObject = JSON.parse(outputsState);

      if (JSON.typeof(myObject) == "undefined") {
        Serial.println("Parsing input failed!");
        return;
      }

      JSONVar keys = myObject.keys();

      for (int i = 0; i < keys.length(); i++) {
        JSONVar value = myObject[keys[i]];

        Switch_ID[i]              = atoi(value[0]);
        Switch_Mode[i]            = atoi(value[1]);
        Switch_State[i]           = atoi(value[2]);
        Switch_AlarmOn[i]         = atoi(value[3]);
        Switch_AlarmOFF[i]        = atoi(value[4]);
        Switch_JustChanged[i]     = atoi(value[5]);

        if (Switch_Mode[i] == 0 && Switch_State[i] == 0 && Switch_JustChanged[i] == 0) {
              mySwitch315.send(Switch_ID[i], 24);
              New_State[i] = 1;
              New_JustChanged[i] = 1;
        }
        if (Switch_Mode[i] == 0 && Switch_State[i] == 1 && Switch_JustChanged[i] == 1) {
              mySwitch315.send(Switch_ID[i], 24);
              New_State[i] = 0;
              New_JustChanged[i] = 0;
        }
        if (Switch_Mode[i] == 1 && Switch_AlarmOn[i] == 1 && Switch_State[i] == 0 && Switch_JustChanged[i] == 0) {
              mySwitch315.send(Switch_ID[i], 24);
              New_State[i] = 1;
              New_JustChanged[i] = 1;
        }
        if (Switch_Mode[i] == 1 && Switch_AlarmOFF[i] == 1 && Switch_State[i] == 1 && Switch_JustChanged[i] == 1) {
              mySwitch315.send(Switch_ID[i], 24);
              New_State[i] = 0;
              New_JustChanged[i] = 0;
        }
      }
      Serial.println(Switch_ID[0]);
      Serial.println(Switch_Mode[0]);
      Serial.println(Switch_State[0]);
      Serial.println(Switch_AlarmOn[0]);
      Serial.println(Switch_AlarmOFF[0]);
      Serial.println(Switch_JustChanged[0]);
      Serial.println(New_JustChanged[0]);
      Serial.println(New_State[0]);

    previousMillis = currentMillis;

    //How to send back ? ....
    //Post_Response_Data(Switch_ID[], Switch_AlarmON[], Switch_AlarmOFF[], New_JustChanged[], New_State[]); 

这是我在监视器中的“ outputState”:

OutputState ( {ID Key:[Switch ID, State, Mode, AlarmON, AlarmOFF,JustChanged]}

{"3038947":["3038947","0","0","0","0","0"],"3038948":["3038948","0","0","0","0","0"]}

如何从数组中构造JSON:Switch_ID [],...以便将其发送回服务器。谢谢。

mysql json nodemcu
1个回答
0
投票

您可以使用Object.keys()遍历键并转换object中的数组。


let sample = {"3038947":["3038947","0","0","0","0","0"],"3038948":["3038948","0","0","0","0","0"]};

let output = {};

Object.keys(sample).forEach(key => {
   if(!output[key]) output[key] = {};
   let arr = sample[key];
   output[key] = {
      switchId: arr[0],
      state: arr[1],
      mode: arr[2],
      alarmOn: arr[3],
      alarmOff: arr[4],
      justChanged: arr[5]
   };
});


console.log(output); // 

© www.soinside.com 2019 - 2024. All rights reserved.