Записать в существующий файл json - PullRequest
0 голосов
/ 09 апреля 2019

Я использую этот код для добавления в мой существующий файл 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, &outputFileStream);

1 Ответ

1 голос
/ 09 апреля 2019

Моя рекомендация

  • Загрузить файл в Json::Value
  • Добавить или изменить любые поля, которые вы хотите
  • Перезаписать оригинальный файл обновленным Json::Value

Это будет наименее подверженный ошибкам метод, и он будет работать быстро, если у вас не очень большой файл Json.

Как читать весь файл

Это довольно просто! Мы делаем рут, затем просто используем оператор >> для чтения в файле.

Json::Value readFile(std::istream& file) {
    Json::Value root;
    Json::Reader reader;
    bool parsingSuccessful = reader.parse( file, root );
    if(not parsingSuccessful) {
        // Handle error case
    }
    return root; 
}

См. эту документацию здесь для получения дополнительной информации

...