boost property_tree :: json_parser :: read_json&输入输出流:: filtering_streambuf

时间:2012-09-22 09:03:19

标签: c++ json boost stream

我试图阅读放气的json并遇到类型转换问题,这里是代码

boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
std::istringstream iss(std::ios::binary);
iss.rdbuf()->pubsetbuf(buf, len);
iss.imbue( std::locale("ru_RU.CP1251") );
in.push( boost::iostreams::zlib_decompressor() );
in.push( iss );

boost::property_tree::ptree pt;
boost::property_tree::json_parser::read_json(in, pt); // <-- Compile error

编译说:

  

src / ABPacking.cpp:48:错误:没有用于调用的匹配函数   'read_json(boost :: iostreams :: filtering_streambuf,std :: allocator,   boost :: iostreams :: public_&gt;&amp;,boost :: property_tree :: ptree&amp;)'

问题是如何将 filtering_streambuf 传递给 read_json 而不进行不必要的数据复制?

1 个答案:

答案 0 :(得分:2)

read_json要求文件名或带有JSON内容的。您正在尝试传递流缓冲区,它将不知道如何处理它。

作为解决方案,只需将流缓冲区传递给使用它的istream并将其传递给read_json

std::istream input(&in_buf);
read_json(input, pt);