0

我无法从以下 json 中的“prefs”获取键(和值)。

{
  "cmd": "set",
  "prefs": [
    {
      "coins": 4
    },
    {
      "enable": true
    }
  ]
}

处理json的代码:

    DynamicJsonDocument doc(1024);
    deserializeJson(doc,"{\"cmd\":\"set\",\"prefs\":[{\"coins\":4},{\"enable\":true}]}");
    JsonObject root=doc.as<JsonObject>();
    for (JsonPair kv : root) {
        Serial.println(kv.key().c_str());
        Serial.println(kv.value().as<char*>());
    }
    JsonObject prefs=doc["prefs"];
    for (JsonPair kv : prefs) {
        Serial.println("here\n");
        Serial.println(kv.key().c_str());
//        Serial.println(kv.value().as<const char*>());
    }

希望看到以下输出:

cmd
set
prefs
coins
enable

但我只得到似乎是一个空prefs对象:

cmd
set
prefs

官方文档中显示的示例几乎可以让我到达那里,这就是我的代码中的内容。来自 github的这个例子是相似的,但我似乎无法适应我的情况。

4

1 回答 1

0

由于prefs是一个数组,将其转换为JsonArray

JsonArray prefs = doc["prefs"].as<JsonArray>();
for (JsonObject a : prefs) {
    for (JsonPair kv : a) {
        Serial.println(kv.key().c_str());
        if (kv.value().is<int>()) {
            Serial.println(kv.value().as<int>());
        }
        else {
            Serial.println(kv.value().as<bool>());
        }
    }
}
于 2022-02-07T19:12:29.173 回答