Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过网络序列化并发送JSOn字符串格式的std::list?_C++_Json_C++11_Serialization_Boost - Fatal编程技术网

C++ 如何通过网络序列化并发送JSOn字符串格式的std::list?

C++ 如何通过网络序列化并发送JSOn字符串格式的std::list?,c++,json,c++11,serialization,boost,C++,Json,C++11,Serialization,Boost,我试图通过网络发送std::list容器中的数据列表。我尝试一次性发送列表,而不是单独发送列表中的每个元素。为此,我使用了boost::serialization。我使用以下方法编译: g++ -o main main.cpp DBAccess11.cpp -lsqlite3 -lboost_serialization 我得到了与我所寻求的非常相似的帮助 不过,基于示例,我成功地编译了我的程序。但不幸的是,我没有看到任何序列化输出 下面是我的DBAccess1.h文件 #ifndef DBAc

我试图通过网络发送std::list容器中的数据列表。我尝试一次性发送列表,而不是单独发送列表中的每个元素。为此,我使用了boost::serialization。我使用以下方法编译:

g++ -o main main.cpp DBAccess11.cpp -lsqlite3 -lboost_serialization
我得到了与我所寻求的非常相似的帮助

不过,基于示例,我成功地编译了我的程序。但不幸的是,我没有看到任何序列化输出

下面是我的DBAccess1.h文件

#ifndef DBAccess1_HH  
#define DBAccess1_HH

#include <iostream>  // I have deleted some header for sake of readability
#include <list>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/list.hpp>

using namespace std;    
//================================//   
struct SiteCode
{
      int siteID;
      int siteCode;
  private:
      friend class boost::serialization::access;
      template<class Archive>
      void serialize(Archive & ar, const unsigned int /*version*/)
      {
            ar & siteID;
            ar & siteCode;
      }
 };

inline ostream& operator<< (ostream &out, SiteCode &site)
{
    out << "(" << site.siteID << "," << site.siteCode << ")";
    return out;
}
//================================//

class sqliteDB {
    list<SiteCode> Site_Code_list;
public:
    list<SiteCode> GET_ALL_Site_Code();
    void printList();
};
#endif**

当我尝试cout时,有必要将
std::stringstream
类的
out
实例输出到
cout
中,而不是
oa
实例,即

std::stringstream out;

            // serialize into the stream
            {
                boost::archive::binary_oarchive oa(out);
                oa << Site_Code_list;
//line-84>>>    cout<< oa << endl;
            }
cout << out.str() << endl;
std::stringstream out;
//序列化到流中
{
boost::archive::二进制文件oarchive oa(out);

oa>>cout@megabyte1024-我尝试了你的建议,做了一些我自己的修改,现在我可以看到输出:)。但是现在我想要JSON字符串格式的数据。我知道我需要使用ptree.hpp和JSON_parser.hpp。但是如果我使用它们,我还需要使用boost::archive::text_oarchive吗?还是只使用boost/ptree.hpp和boost/JSON_parser only?@K.K,我不知道Boost属性树是否能够与Boost归档(Boost::archive::text\u oarchive等)一起工作。但我假设不是。我看到了两个使用Boost将JSON数据转换为对象结构的机会。1.使用Boost属性树加上将属性树转换为所需对象结构的适配器。2.使用Boost Serialization plus编写处理JSON数据的存档类,类似于xml_-oarchive和xml_oarchive处理xml数据。也可以使用任何其他解析JSON数据的库。
#include <iostream>
#include <list>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/list.hpp>
#include "DBAccess1.h"

using namespace std ;

int main()
{
    sqliteDB object1;
    object1.GET_ALL_Site_Code();
    object1.printList();
    cout << "\n\nAll the statement were executed properly\n\n";
    return 0;
}
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
Preparing to push data into List
Data was pushed successfully
The size of List is :10
(7,786) (8,78) (9,785) (10,998) (11,656) (13,23) (14,7) (15,74) (16,954) (17,752) 
DBAccess11.cpp: In member function ‘std::list<SiteCode> sqliteDB::GET_ALL_Site_Code()’:
DBAccess11.cpp:81:9: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘boost::archive::binary_oarchive’)
    cout << oa << endl;
            ^
std::stringstream out;

            // serialize into the stream
            {
                boost::archive::binary_oarchive oa(out);
                oa << Site_Code_list;
//line-84>>>    cout<< oa << endl;
            }
cout << out.str() << endl;