Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 03.01.2018
Сообщений: 3
1

Добавление элемента массива в существующий JSON файл

19.05.2020, 16:00. Просмотров 112. Ответов 0

Имеется JSON файл (прим. ниже).
Задача, получить массив по имени, и добавить в него 1 элемент, без создания копии в конце файла (как у меня сейчас получается).
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"wears":[
{
"id":0,
"name":"name"
},
{
"id":1,
"name":"name1"
}
],
"employees":[
{
"name":"name"
"wearId":-1
},
{
"name":"name1"
"wearId":-1
}
]
}
Можно конечно разделить объекты employees и wears по отдельным файлам, и каждый раз перед обновлением файла, полностью его стирать и полностью записывать, но мне кажется, что должно быть какое-то правильное решение.

Мой код функции добавление объекта Wear:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void AddWear(Wear newWear)
  {
      QFile file(JsonPath);
      QJsonParseError docError;
      QJsonDocument doc;
 
      if (file.open(QIODevice::ReadWrite | QFile::Text))
      {
 
         doc = QJsonDocument::fromJson(QByteArray(file.readAll()), &docError);
 
        if (docError.errorString().toInt() == QJsonParseError::NoError)
        {
 
        QVariantMap map;
        map.insert("id",   newWear.getId());
        map.insert("name", newWear.getQName());
        map.insert("level",newWear.getWearLevelInt());
 
        int val = 0;
        newWear.isWeared() == true ? val = 1 : val = 0;
        map.insert("isOn",val);
 
        QJsonObject jsonObj =  QJsonObject::fromVariantMap(map);
 
        QJsonArray wearsArray = QJsonValue(doc.object().value("wears")).toArray();
 
        wearsArray.push_back(jsonObj);
 
        doc.setArray(wearsArray);
        file.write(doc.toJson());
        file.close();
      }
        else
        {
            QMessageBox::information(nullptr,"Info","Ошибка чтения");
        }
     }
     else
     {
          QMessageBox::information(nullptr,"Info","Не удалось открыть Json файл на запись");
     }
      wearList.push_back(newWear);
  }
P.S. Я не стал переписывать все параметры из json чтобы не расписывать лишнюю информацию, там еще есть поля level и isOn
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2020, 16:00
Ответы с готовыми решениями:

Добавление данных в существующий xml файл
Всем привет! Как открыть и прочитать xml разобрался. не получается добавить данные в...

Добавление данных из Datagridview в существующий Excel файл
Привет! Код работает, но он в в файле перезаписывает данные, а мне надо чтобы данные в excel...

Apache poi - добавление новой страницы в существующий файл xlsx
Есть сценарий для тестирования страницы со списком товаров. В течении этого сценария данные с web...

Как правильно дополнять существующий json
Подскажите пожалуйста, как записаывать новые данные в существующий файлик json. То есть, есть...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2020, 16:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сделать добавление элемента в массив и удаление элемента из массива используя STL
Всем привет. Помогите пожалуйста написать. Нужно использовать STL. Необходимо сделать добавление...

Дозапись данных в существующий массив JSON в файле
Возникли проблеммы с записью в JSON в сам файл, а не чтение. Не знал в какую тему написать в jQuery...

Удаление элемента из массива в JSON файле
Привет народ, учусь работать с запросами на примере json. Собственно, появился вопрос, можно ли...

Создать файл Х, элементы которого получены из массива А. Добавить в файл Х два последних элемента массива B.
Создать файл Х, элементы которого получены из массива А. Добавить в файл Х два последних элемента...

Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей
Здравствуйте. Помогите, пожалуйста, разобраться с одним большим заданием. Задание пока в процессе...

Добавление записи в существующий запрос
Есть запрос: SELECT Registr.Zaezd, Registr.Vyezd, Registr.KodRegistr, Sotrudn.Famil,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.