使用boost库完成读写JSON字符串
作者:互联网
boost库的编译不做赘述,这里用的版本是1.69.0,其他版本应该差不多
boost官网:https://www.boost.org/
0.前言
今天要整的JSON是这样的
{ "description": "this is a JSON test", "version": "100", "list": { "listkey1": "listvalue1", "listkey2": "listvalue2", "listkey3": "listvalue3" }, "words": [ "apple", "banana", "cat" ] }
首先先新建一个vs的工程,设置include路径和lib路径
额外添加的lib为\boost\1.69.0\stage64\lib\libboost_system-vc141-mt-gd-x64-1_69.lib
在头文件中添加
#include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp>
使用ptree来完成JSON的读写操作
1、写JSON字符串
1.0、如何将ptree转换成字符串输出到屏幕
使用stringstream
std::stringstream ss; boost::property_tree::write_json(ss, pt); std::string strContent = ss.str();
1.1、添加简单值
// root boost::property_tree::ptree root; // add simple value root.put(std::string("description"), std::string("this is a JSON test")); root.put(std::string("version"), 100);
1.2、添加一组对象
// add a list of objs boost::property_tree::ptree ptObjs; ptObjs.put(std::string("listkey1"), std::string("listvalue1")); ptObjs.put(std::string("listkey2"), std::string("listvalue2")); ptObjs.put(std::string("listkey3"), std::string("listvalue3")); root.add_child(std::string("list"), ptObjs);
1.3、添加一组值
// add a list of values boost::property_tree::ptree ptValItem1, ptValItem2, ptValItem3, ptVals; ptValItem1.put_value(std::string("apple")); ptVals.push_back(std::make_pair("", ptValItem1)); ptValItem2.put_value(std::string("banana")); ptVals.push_back(std::make_pair("", ptValItem2)); ptValItem3.put_value(std::string("cat")); ptVals.push_back(std::make_pair("", ptValItem3)); root.add_child(std::string("words"), ptVals);
1.4、输出到屏幕
先通过1.0写一个输出的function
void ptreePrint(boost::property_tree::ptree pt, std::string ptName, std::string descritpion) { std::stringstream ss; boost::property_tree::write_json(ss, pt); std::string strContent = ss.str(); std::cout << descritpion << std::endl << ptName << " : " << strContent << std::endl << "--------------------------------------\n"; }
然后将每步产生的ptree输出
2.读JSON字符串
2.1 读简单值
// read simple value std::string description = pt.get<std::string>("description"); int version = pt.get<int>("version");
2.2 读一组对象
// read list of objs std::cout << std::endl << "read list of objs " << std::endl; for (auto ptItem : pt.get_child("list")) { std::string key = ptItem.first; std::string val = ptItem.second.data(); std::cout << "key:\t" << key << "\tvalue:\t" << val << std::endl; }
2.3 读一组值
// read list of values std::cout << std::endl << "read list of values" << std::endl << "words: "; for (auto ptItem : pt.get_child("words")) { std::cout << ptItem.second.data() << " "; }
2.4 输出到屏幕
3.完整代码
#include "pch.h" #include <iostream> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp> void readTest(boost::property_tree::ptree pt) { std::cout << __func__ << std::endl; // read simple value std::string description = pt.get<std::string>("description"); int version = pt.get<int>("version"); std::cout << "description : " << description << std::endl << "version : " << version << std::endl; // read list of objs std::cout << std::endl << "read list of objs " << std::endl; for (auto ptItem : pt.get_child("list")) { std::string key = ptItem.first; std::string val = ptItem.second.data(); std::cout << "key:\t" << key << "\tvalue:\t" << val << std::endl; } // read list of values std::cout << std::endl << "read list of values" << std::endl << "words: "; for (auto ptItem : pt.get_child("words")) { std::cout << ptItem.second.data() << " "; } } void ptreePrint(boost::property_tree::ptree pt, std::string ptName, std::string descritpion) { std::stringstream ss; boost::property_tree::write_json(ss, pt); std::string strContent = ss.str(); std::cout << descritpion << std::endl << ptName << " : " << strContent << std::endl << "--------------------------------------\n"; } void JSONtest() { // root boost::property_tree::ptree root; // add simple value root.put(std::string("description"), std::string("this is a JSON test")); root.put(std::string("version"), 100); ptreePrint(root, std::string("root"), "add simple value"); // add a list of objs boost::property_tree::ptree ptObjs; ptObjs.put(std::string("listkey1"), std::string("listvalue1")); ptObjs.put(std::string("listkey2"), std::string("listvalue2")); ptObjs.put(std::string("listkey3"), std::string("listvalue3")); root.add_child(std::string("list"), ptObjs); ptreePrint(root, std::string("root"), "add a list of objs"); // add a list of values boost::property_tree::ptree ptValItem1, ptValItem2, ptValItem3, ptVals; ptValItem1.put_value(std::string("apple")); ptVals.push_back(std::make_pair("", ptValItem1)); ptValItem2.put_value(std::string("banana")); ptVals.push_back(std::make_pair("", ptValItem2)); ptValItem3.put_value(std::string("cat")); ptVals.push_back(std::make_pair("", ptValItem3)); root.add_child(std::string("words"), ptVals); ptreePrint(ptVals, std::string("ptVals"), ""); ptreePrint(root, std::string("root"), "add a list of values"); readTest(root); } int main() { JSONtest(); }
标签:std,string,读写,JSON,put,include,boost,ptree 来源: https://www.cnblogs.com/Sseakompp/p/12205793.html