ArduinoJson, Ошибка при разборе массива с кавычкой перед квадратными скобками - PullRequest
0 голосов
/ 04 февраля 2019

В течение трех дней я тщетно пытался разобрать строку JSON (поток).Сегодня я обнаружил, что невозможно проанализировать строку JSON с кавычкой перед квадратными скобками.К сожалению, я не могу запросить строку JSON по-другому.

У вас есть идея, как я могу получить данные?Приложены полные строки JSON и мой код.

Сначала мне нужны все данные, но я сосредоточусь на массивах "javascript.0.Wetterstation.HistTemp1Date" и "javascript.0.Wetterstation.HistTemp1".Я в полном отчаянии и не могу продолжать.

JSON-Input:

{
  "javascript.0.Wetterstation.TempDraussenMin": {
    "val": -0.1,
    "ack": false,
    "ts": 1549216440089,
    "q": 0,
    "from": "system.adapter.javascript.0",
    "lc": 1549216440080
  },
  "javascript.0.Wetterstation.TempDraussenMax": {
    "val": 5.5,
    "ack": false,
    "ts": 1549198440031,
    "q": 0,
    "from": "system.adapter.javascript.0",
    "lc": 1549198440031
  },
  "javascript.0.Wetterstation.TempDraussenMinTime": {
    "val": "18:54:00 - 03.02.2019",
    "ack": false,
    "ts": 1549216440096,
    "q": 0,
    "from": "system.adapter.javascript.0",
    "lc": 1549216440096
  },
  "javascript.0.Wetterstation.TempDraussenMaxTime": {
    "val": "13:54:00 - 03.02.2019",
    "ack": false,
    "ts": 1549198440034,
    "q": 0,
    "from": "system.adapter.javascript.0",
    "lc": 1549198440034
  },
  "javascript.0.Wetterstation.LastResetMinMax": {
    "val": "11:45:40 - 03.02.2019",
    "ack": false,
    "ts": 1549190740415,
    "q": 0,
    "from": "system.adapter.javascript.0",
    "lc": 1549190740415
  },
  "javascript.0.Wetterstation.UpdateAnAus": {
    "val": false,
    "ack": false,
    "ts": 1548212875725,
    "q": 0,
    "from": "system.adapter.admin.0",
    "lc": 1548212875725
  },
  "javascript.0.Wetterstation.ResetMinMax": {
    "val": true,
    "ack": false,
    "ts": 1549190740396,
    "q": 0,
    "from": "system.adapter.web.0",
    "lc": 1547985029727
  },
  "javascript.0.Wetterstation.HistTemp1Date": {
    "val": "[\"2019-1-31 20:00:00\",\"2019-1-31 21:00:00\",\"2019-1-31 22:00:00\",\"2019-1-31 23:00:00\",\"2019-2-1 00:00:00\",\"2019-2-1 01:00:00\",\"2019-2-1 02:00:00\",\"2019-2-1 03:00:00\",\"2019-2-1 04:00:00\",\"2019-2-1 05:00:00\",\"2019-2-1 06:00:00\",\"2019-2-1 07:00:00\",\"2019-2-1 08:00:00\",\"2019-2-1 09:00:00\",\"2019-2-1 10:00:00\",\"2019-2-1 11:00:00\",\"2019-2-1 12:00:00\",\"2019-2-1 13:00:00\",\"2019-2-1 14:00:00\",\"2019-2-1 15:00:00\",\"2019-2-1 16:00:00\",\"2019-2-1 17:00:00\",\"2019-2-1 18:00:00\",\"2019-2-1 20:00:00\",\"2019-2-1 21:00:00\",\"2019-2-1 22:00:00\",\"2019-2-1 23:00:00\",\"2019-2-2 00:00:00\",\"2019-2-2 01:00:00\",\"2019-2-2 02:00:00\",\"2019-2-2 03:00:00\",\"2019-2-2 04:00:00\",\"2019-2-2 05:00:00\",\"2019-2-2 06:00:00\",\"2019-2-2 07:00:00\",\"2019-2-2 08:00:00\",\"2019-2-2 09:00:00\",\"2019-2-2 10:00:00\",\"2019-2-2 11:00:00\",\"2019-2-2 12:00:00\",\"2019-2-2 13:00:00\",\"2019-2-2 14:00:00\",\"2019-2-2 15:00:00\",\"2019-2-2 16:00:00\",\"2019-2-2 17:00:00\",\"2019-2-2 18:00:00\",\"2019-2-2 19:00:00\",\"2019-2-2 20:00:00\",\"2019-2-2 21:00:00\",\"2019-2-2 22:00:00\",\"2019-2-2 23:00:00\",\"2019-2-3 00:00:00\",\"2019-2-3 01:00:00\",\"2019-2-3 02:00:00\",\"2019-2-3 03:00:00\",\"2019-2-3 04:00:00\",\"2019-2-3 05:00:00\",\"2019-2-3 06:00:00\",\"2019-2-3 07:00:00\",\"2019-2-3 08:00:00\",\"2019-2-3 09:00:00\",\"2019-2-3 10:00:00\",\"2019-2-3 11:00:00\",\"2019-2-3 12:00:00\",\"2019-2-3 13:00:00\",\"2019-2-3 14:00:00\",\"2019-2-3 15:00:00\",\"2019-2-3 16:00:00\",\"2019-2-3 17:00:00\",\"2019-2-3 18:00:00\"]",
    "ack": false,
    "ts": 1549217316165,
    "q": 0,
    "from": "system.adapter.javascript.0",
    "lc": 1549217316165
  },
  "javascript.0.Wetterstation.HistTemp1": {
    "val": "[-1.24,-0.67,-0.13,-0.58,-1.26,-1.81,-1.49,-0.75,-0.52,-0.4,-0.04,0,-0.13,-0.06,0.37,0.87,1.51,1.78,3.05,3.7,3.7,3.06,2.48,2.09,1.9,0.93,-0.28,-0.64,-0.49,-0.36,-0.31,-0.06,0.15,0.42,0.65,0.58,0.39,0.62,1.09,1.31,0.83,0.71,1.04,0.94,0.5,0.59,0.54,0.5,0.56,0.4,-0.34,-0.13,0.11,0.2,-0.02,-0.37,0.03,-0.21,-0.53,-1.05,-0.86,-0.49,0.36,1.77,3.86,4.96,5.13,5.21,4.14,1.48]",
    "ack": false,
    "ts": 1549217316168,
    "q": 0,
    "from": "system.adapter.javascript.0",
    "lc": 1549217288962
  }
}

Код:

if (client.connect(host, 8088))

  {
    Serial.println("connected]");

    Serial.println("[Sending a request]");
    client.print(String("GET /getBulk/javascript.0.Wetterstation.*") + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n" +
                 "\r\n"
                );



    char status[32] = {0};
    client.readBytesUntil('\r', status, sizeof(status));
    if (strcmp(status, "HTTP/1.1 200 OK") != 0) {
      Serial.print(F("Unexpected response: "));
      Serial.println(status);
       return;
    }
    char endOfHeaders[] = "\r\n\r\n";
    if (!client.find(endOfHeaders)) {
      Serial.println(F("Invalid response"));
      return;
    }

    Serial.println("[Response:]");
    while (client.connected() || client.available())
    {
      if (client.available())
      {
        String line = client.readStringUntil('\n');
        Serial.println(line);
      }
    }


    client.stop();
    Serial.println("\n[Disconnected]");
  }
  else
  {
    Serial.println("connection failed!]");
    client.stop();
  }

  Serial.println(client);

  const int capacity = 4081;
  DynamicJsonBuffer jsonBuffer(capacity);

  JsonObject&  parsed = JSONBuffer.parseObject(client);
  JsonArray& values = parsed[javascript.0.Wetterstation.HistTemp1][“val”];

1 Ответ

0 голосов
/ 04 февраля 2019

невозможно проанализировать строку JSON с кавычкой перед квадратными скобками

Почему это невозможно?

"val": "[-1.24,-0.67,...]" - это поле с именем val, которому присваивается строка .Вы должны иметь возможность просто получить доступ к его значению в виде строки.Это как раз то, что обеспечивает JSON.

Если вы хотите продолжить обработку этой строки, у вас есть две опции:

a) взять строку и проанализировать ее в своем собственном коде или

b) взять эту строку, сделать ее допустимой JSON, например, с помощью чего-то вроде "{ \"arr\": " + arrayString + "}", а затем снова проанализировать эту новую строку как JSON.

Конечно, наилучшим способом было бы, чтобы источник доставилправильно JSON в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...