Ну вроде написал я добавление объектов. А т.к. оно идет через считывание файла, а потом добавление или удаление элемента массива, то и удалить можно будет.
Смущает меня, что весь файл перезаписывается, хотя ведь это файл, а не база данных. Он все равно будет весь перезаписываться. И еще один момент, который я бы хотел уточнить.
Я считываю JsonArray в строку при помощи printTo(). А потом ее пишу в файл. Мне не нравиться, что в файле после этого строки в виде столбцов. Вот так:
Код:
[
{
"cyear": 2021,
"cmonth": 12,
"cday": 31,
"chour": 23,
"cmin": 55,
"tin": 28.5,
"tout": -13.6,
"vlagn": 13.5,
"davl": 745.6
},
{
"cyear": 2021,
"cmonth": 12,
"cday": 31,
"chour": 23,
"cmin": 56,
"tin": 28.3,
"tout": -13.2,
"vlagn": 13.3,
"davl": 745.5
},
Можно ли сделать, чтобы они постросно писались, как я раньше показывал:
Код:
[{"cyear":2021, "cmonth":12, "cday":31, "chour":23, "cmin":55, "tin":28.5, "tout":-13.6, "vlagn":13.5, "davl":745.6},
{"cyear":2021, "cmonth":12, "cday":31, "chour":23, "cmin":58, "tin":25.6, "tout":-3.7, "vlagn":15.8, "davl":747.8}]
Ну т.е. в одну строку. Так ведь файл будет меньше места занимать? Или я ошибаюсь?
Ну и собственно вот что у меня получилось. Собственно это тест, поэтому новые данные я передаю через ввод порта:
Код:
void loop() {
if (Serial.available() > 0) {
//Данные вносим через разделитель запятую. Знак разделяющий целое от десятых - точка.
String str = Serial.readString();
if (str != "")
{
char indata[str.length() + 1];
strcpy(indata, str.c_str());
str = "";
addJsonObject(indata);
}
}
}
Ну а дальше считываю файл, добавляю в массив строку, ту что в порт передал в виде JsonObject, (или если потом надо будет удалить, удалю нужный объект), потом передаж JasonArray в строку, а потом сохраняю в файл.
Код:
void addJsonObject(char *instring) {
String fileData = readFile("/2.json");
char dataJson[fileData.length() + 1];
strcpy(dataJson, fileData.c_str());
DynamicJsonBuffer jsonBuffer;
JsonArray& root = jsonBuffer.parseArray(dataJson);
Serial.println(instring);
//JsonObject obj = jsonBuffer.createObject();
JsonObject& obj = jsonBuffer.parseObject(instring);
root.add(obj);
String out;
root.printTo(out);
Serial.println(out);
writeFile("/2.json", out);
}
String readFile(String fileName) {
File configFile = SPIFFS.open(fileName, "r");
if (!configFile) {
return "Failed";
}
String temp = configFile.readString();
configFile.close();
return temp;
}
String writeFile(String fileName, String strings ) {
File configFile = SPIFFS.open(fileName, "w");
if (!configFile) {
return "Failed to open config file";
}
configFile.print(strings);
configFile.close();
return "Write sucsses";
}
Может оно и коряво или некрасиво, но работает.
Может посоветуете, что можно улучшить. Ну и как передавать не ввиде колонок, а ввиде строки.