The best JSON library for embedded C++

Spoony 64.6m2020-12-261026 次点击
https://arduinojson.org/

Serialization

```
DynamicJsonDocument doc(1024);

doc["sensor"] = "gps";
doc["time"] = 1351824120;
doc["data"][0] = 48.756080;
doc["data"][1] = 2.302038;

serializeJson(doc, Serial);
// This prints:
// {‌‌‌"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
```

Deserialization

```
char json[] = "{‌‌‌\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";

DynamicJsonDocument doc(1024);
deserializeJson(doc, json);

const char* sensor = doc["sensor"];
long time = doc["time"];
double latitude = doc["data"][0];
double longitude = doc["data"][1];
```

Sample
```
#include <ArduinoJson.h>

DynamicJsonBuffer jsonBuffer;
Serial.begin(115200);
Serial.println("\r\n\n\nStart");

// 序列化(json对象转字符串)
JsonObject& testRoot = jsonBuffer.createObject();
testRoot["key1"] = "value1";
testRoot["key2"] = 12345;
JsonArray& data = testRoot.createNestedArray("data");
data.add(48.756080);
data.add(54321);
String strJson2;
testRoot.printTo(strJson2);
Serial.println(String() + F("Json string:") + strJson2);
Serial.println("\n\n");

// json字符串转对象
String input = "{‌\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
JsonObject& root = jsonBuffer.parseObject(input);
long time = root["time"];
String sensor = root[String("sensor")];
double latitude = root["data"][0];
double longitude = root["data"][1];
Serial.println(String() + F("time:") + time);
Serial.println(String() + F("sensor:") + sensor);
Serial.println(String() + F("latitude:") + latitude);
Serial.println(String() + F("longitude:") + longitude);
```

#### 存储消耗
该库对于arduino来说, 吃存储不小, 上面几句代码, 耗用的存储如下(arduino uno数据):

项目使用了 12400 字节,占用了 (38%) 程序存储空间。最大为 32256 字节。
全局变量使用了504字节,(24%)的动态内存,余留1544字节局部变量。最大为2048字节。
其中串口分别占去rom和ram为: 5%, 9%.

算起来:
如果只有json对象转字符串, 消耗的rom和ram分别为: 18%, 10%.
如果只有json字符串解析成对象, 消耗的rom和ram分别为: 31%, 14%.
收藏 ♥ 感谢
AstroAir 50cm 2020-12-26  ♥ 1
我认为JsonCpp也不错,用起来很方便

登录注册 后可回复。



GitHub