#c #json #jsoncpp
#c #json #jsoncpp
Вопрос:
Я использую этот код для добавления в мой существующий файл JSON. Однако он полностью переопределяет мой файл JSON и просто помещает в него один объект JSON, когда я просто хотел бы добавить еще один элемент в список элементов в моем файле JSON. Как бы мне это исправить?
Json::Value root;
root[h]["userM"] = m;
root[h]["userT"] = t;
root[h]["userF"] = f;
root[h]["userH"] = h;
root[h]["userD"] = d;
Json::StreamWriterBuilder builder;
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
std::ofstream outputFileStream("messages.json");
writer-> write(root, amp;outputFileStream);
Комментарии:
1. Какую библиотеку вы используете?
2. Да, jsoncpp я не могу найти другого способа сделать это, я ищу часами @drescherjm
3. Держу пари, что практически каждая существующая библиотека JSON поддерживает только переопределение файла, а не выполнение операций на месте. Операции на месте в структурированном файле просто не имеют особого смысла (другими словами: это физически невозможно). Есть ли причина, по которой вы не хотите читать файл JSON, редактировать структуру и записывать его обратно?
Ответ №1:
Моя рекомендация
- Загрузите файл в
Json::Value
- Добавьте или измените любые поля, которые вы хотите
- Перезаписать исходный файл обновленным
Json::Value
Это будет наименее подверженный ошибкам метод, и он будет работать быстро, если у вас нет очень большого Json
файла.
Как читать во всем файле
Это довольно просто! Мы создаем корень, затем просто используем >>
оператор для чтения в файле.
Json::Value readFile(std::istreamamp; file) {
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse( file, root );
if(not parsingSuccessful) {
// Handle error case
}
return root;
}
Смотрите Эту документацию здесь для получения дополнительной информации
Комментарии:
1. Как загрузить файл в Json::Value, а затем добавить к нему, как вы говорите?