【C++】Boost库之Json工具-创新互联
目前的Boost库为1.80,其中的Json工具使用示例如下:
创新互联公司从2013年创立,是专业互联网技术服务公司,拥有项目网站设计制作、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元德州做网站,已为上家服务,为德州各地企业和个人服务,联系电话:13518219792//
// main.cpp
//
// Created by Tao on 2022/11/27.
//
#include#include#includenamespace json = boost::json;
json::value parse_demo_str(std::string str) {
json::stream_parser p;
json::error_code ec;
p.write(str.c_str(), str.length(), ec);
if( ec )
return nullptr;
p.finish( ec );
if( ec )
return nullptr;
return p.release();
}
void pretty_print( std::ostream& os, json::value const& jv, std::string* indent = nullptr ) {
std::string indent_;
if(! indent)
indent = &indent_;
switch(jv.kind())
{
case json::kind::object:
{
os<< "{\n";
indent->append(4, ' ');
auto const& obj = jv.get_object();
if(! obj.empty())
{
auto it = obj.begin();
for(;;)
{
os<< *indent<< json::serialize(it->key())<< " : ";
pretty_print(os, it->value(), indent);
if(++it == obj.end())
break;
os<< ",\n";
}
}
os<< "\n";
indent->resize(indent->size() - 4);
os<< *indent<< "}";
break;
}
case json::kind::array:
{
os<< "[\n";
indent->append(4, ' ');
auto const& arr = jv.get_array();
if(! arr.empty())
{
auto it = arr.begin();
for(;;)
{
os<< *indent;
pretty_print( os, *it, indent);
if(++it == arr.end())
break;
os<< ",\n";
}
}
os<< "\n";
indent->resize(indent->size() - 4);
os<< *indent<< "]";
break;
}
case json::kind::string:
{
os<< json::serialize(jv.get_string());
break;
}
case json::kind::uint64:
os<< jv.get_uint64();
break;
case json::kind::int64:
os<< jv.get_int64();
break;
case json::kind::double_:
os<< jv.get_double();
break;
case json::kind::bool_:
if(jv.get_bool())
os<< "true";
else
os<< "false";
break;
case json::kind::null:
os<< "null";
break;
}
if(indent->empty())
os<< "\n";
}
int main(int argc, char** argv) {
std::string str = R"+({
"pi": 3.141,
"happy": true,
"name": "Boost",
"nothing": null,
"answer": {
"everything": 42
},
"list": [1, 0, 2],
"object": {
"currency": "USD",
"value": 42.99
}
})+";
try {
// Parse the string as JSON
auto const jv = parse_demo_str(str);
// Now pretty-print the value
pretty_print(std::cout, jv);
} catch (std::exception const& e) {
std::cerr<< "Caught exception: "<< e.what()<< std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
使用解析器可以将一段字符串(模拟报文)解析为一个通用json value对象,再通过该对象来进行取值并进行打印查看。更多示例见后续更新。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章名称:【C++】Boost库之Json工具-创新互联
链接分享:http://scjbc.cn/article/hejoi.html