首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArduinoJson,分析方括号前面有引号的数组时出错

ArduinoJson,分析方括号前面有引号的数组时出错
EN

Stack Overflow用户
提问于 2019-02-04 19:54:51
回答 1查看 84关注 0票数 0

三天来,我尝试解析一个JSON字符串(流),但都是徒劳的。今天我发现不可能解析在方括号前有引号的JSON字符串。不幸的是,我不能以不同的方式查询JSON字符串。

你知道我是怎么获取数据的吗?附上完整的JSON字符串和我的代码。

我必须拥有所有数据,但我首先关注的是数组"javascript.0.Wetterstation.HistTemp1Date“和"javascript.0.Wetterstation.HistTemp1”。我完全绝望了,无法继续下去了。

JSON-输入:

代码语言:javascript
复制
{
  "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
  }
}

代码:

代码语言:javascript
复制
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”];
EN

回答 1

Stack Overflow用户

发布于 2019-02-04 21:01:52

JSON无法解析在方括号前有引号的

字符串

为什么这不可能呢?

"val": "[-1.24,-0.67,...]"是一个名为val的字段,它被分配了一个字符串。您应该能够简单地以字符串形式访问它的值。这正是JSON所提供的。

如果您想进一步处理该字符串,您有两个选择:

a)获取字符串并在您自己的代码中解析它,或者

b)获取该字符串,使其成为有效的JSON,例如通过类似"{ \"arr\": " + arrayString + "}"之类的东西,然后将新字符串再次解析为JSON。

当然,最好的方法是让源代码首先交付正确的JSON。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54515547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档