使用ArduinoJSON Parser检索嵌入式密钥

时间:2015-10-20 18:37:09

标签: json parsing arduino

我正在使用这个JSON解析器https://github.com/bblanchon/ArduinoJson。通过下面的示例,我可以很好地检索键和值。我在第二个例子中弄清楚如何获得嵌入式密钥。

示例1:     #include

const char* sensor;
long time;
double latitude;
double longitude;

void setup()  { 

    Serial.begin(115200);
    char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";

    StaticJsonBuffer<200> jsonBuffer;

    JsonObject& root = jsonBuffer.parseObject(json);

    sensor      = root["sensor"];
    time        = root["time"];
    latitude    = root["data"][0];
    longitude   = root["data"][1];

    for (JsonObject::iterator it=root.begin(); it!=root.end(); ++it)
    {
       Serial.println(it->key);
    }

} 

void loop()  { 
    // do absolutely nothing
}

示例1输出:

sensor
time
data

我如何从这样的JSON获取密钥?

示例2:

#include <ArduinoJson.h>

void setup()  { 

    Serial.begin(115200);
    char json[] = "{\"Devices\":[{\"Name\":\"something\",\"ModelNumber\":\"1234\"}]}";

    StaticJsonBuffer<200> jsonBuffer;

    JsonObject& root = jsonBuffer.parseObject(json);

    for (JsonObject::iterator it=root.begin(); it!=root.end(); ++it)
    {
       Serial.println(it->key);
    }

} 

void loop()  { 
    // do absolutely nothing
}

示例2输出:

Devices

编辑:

尝试建议的测试:

#include <ArduinoJson.h>

void setup()  { 

    Serial.begin(115200);
    char json[] = "{\"Devices\":[{\"Name\":\"something\",\"ModelNumber\":\"1234\"}],\"AnotherKey\":\"itsValue\"}";

    StaticJsonBuffer<200> jsonBuffer;

    JsonObject& root = jsonBuffer.parseObject(json);

    for (JsonObject::iterator it=root.begin(); it!=root.end(); ++it)
    {
       Serial.println(it->key);
    }

} 

void loop()  { 
    // do absolutely nothing
}

输出:

Devices
AnotherKey

1 个答案:

答案 0 :(得分:0)

我明白了。我只需要根据第一个JSON对象创建一个单独的JSON对象。

#include <ArduinoJson.h>


void setup()  { 

    Serial.begin(115200);
    char json[] = "{\"Devices\":[{\"Name\":\"something\",\"ModelNumber\":\"1234\"}],\"AnotherKey\":\"itsValue\"}";

    StaticJsonBuffer<200> jsonBuffer;

    JsonObject& root = jsonBuffer.parseObject(json);
    JsonObject& root2 = root["Devices"][0];

    for (JsonObject::iterator it=root.begin(); it!=root.end(); ++it)
    {
       Serial.println(it->key);
    }

    for(JsonObject::iterator it=root2.begin(); it!=root2.end(); ++it)
    {
        Serial.println(it->key);
    }

} 

void loop()  { 
    // do absolutely nothing
}

输出:

Devices
AnotherKey
Name
ModelNumber

它看起来并不强大,但它适用于我的情况。