【问题标题】:JSONCPP append to fileJSONCPP 附加到文件
【发布时间】:2019-03-04 19:27:50
【问题描述】:

我正在使用 JSONCPP 记录我在服务器上收到的消息,但它不是附加消息,而是替换最后一条消息。这是我的代码:ofstream 和 event 是私有成员。

  //std::ofstream myfile;
  m_file.open ("messageLogs.json");
  //Json::Value event;
  Json::Value array(Json::arrayValue);
  array.append(Json::Value(1));
  array.append(Json::Value(1));

  m_event["messages"]["time"] = "19:22";
  m_event["messages"]["message"] = msg;

  //populate object with objects
  Json::StyledWriter writer;
  m_file << writer.write(m_event) << std::endl;
  m_file.close();

【问题讨论】:

    标签: c++ c++11 jsoncpp


    【解决方案1】:

    您可以将文件加载为Json::Value 对象,并将其附加到那里。请注意,此代码 sn-p 要求 json 具有一个数组作为文件中的顶级项,例如:

    messageLogs.json

    []
    

    ma​​in.cpp

    #include <iostream>
    #include <fstream>
    #include <json/json.h>
    
    int main(int argc, char* argv[])
    {   
        std::fstream m_file;
        m_file.open ("messageLogs.json", std::ios::in);
    
        Json::Reader reader;
        Json::Value json_obj;
    
        if(!reader.parse(m_file, json_obj, true))
        {
            // json file must contain an array
            std::cerr << "could not parse the json file" << std::endl;
            return -1;
        }
    
        m_file.close();
    
        Json::Value m_event;
        m_event["messages"]["time"] = "19:22";
        m_event["messages"]["message"] = "Some message";//msg;
    
        // append to json object
        json_obj.append(m_event);
    
        std::cout << json_obj.toStyledString() << std::endl;
    
        // write updated json object to file
        m_file.open("messageLogs.json", std::ios::out);
        m_file << json_obj.toStyledString() << std::endl;
        m_file.close();
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-23
      • 2015-02-13
      • 1970-01-01
      • 2013-05-13
      • 2010-09-27
      • 2016-12-12
      • 2019-04-22
      相关资源
      最近更新 更多