前段时间,采用了jsoncpp操作json,这几天在做总结,然后查询到通过boost也可以完成。至于boost的介绍,大家可以搜索了解。

首先下载boost,boost_1_53_0

然后就是编译了

1. 下载

2. 解压缩后,运行bootstrap.bat批处理文件,得到bjam.exe;

3. 打开vs2008,工具-外部工具,里面可以看到“Visual Studio 2008 Command Prompt”,那么我们模仿这个新建一个,参数可以为空,初始目录改为bjam.exe所在的目录。然后在工具菜单下就可以看到自己刚刚新建的工具了,点击他。(这里做的目的就是想采用命令参数的方式运行bjam,不过我用其他方式都没成功,就用这种笨办法了)。

4. 输入“bjam --toolset=msvc-9.0 architecture=x86 link=static runtime-link=static threading=multi debug release --with-property_tree --with-program_options”后,完成编译。编译成的lib文件,放在stage\lib下,形如“libboost_program_options-vc90-sgd-1_53.lib”.

其中:msvc-9.0代表编译成VC9.0(即VS2008)版本,对应的msvc-10.0代表编译成VC10.0(即VS2010)版本; address-model=64代表编译成64位版本,如省略此项,默认为编译成32位版本,--with表示要编译的库,--build-type=complete stage表示编译全部;link=static runtime-link=static表示生成静态库

ps:可以直接运行bjam.exe进行编译,会自动检查相关项,不过生成的库形如“libboost_program_options-vc90-gd-1_53.lib”

编译的时候,很多人遇到了这个错误LINK : fatal error LNK1104: 无法打开文件“libboost_program_options-vc90-mt-sgd-1_53.lib”

那就是由于编译选项里面没有指定静态,所以导致生成的库不对。

库可以用了,那我们就开始测试了

1.包含boost文件和库

文件目录..\boost_1_53_0

库目录..\boost\boost_1_53_0\stage\lib

2.添加需要的头文件

#include "boost/property_tree/ptree.hpp"
#include "boost/property_tree/json_parser.hpp"
#include "boost/property_tree/xml_parser.hpp"//#include "boost/program_options/detail/convert.hpp"
#include "boost/program_options/detail/utf8_codecvt_facet.hpp"

3.主角

try{/* create boost utf8 codecvt */std::locale oldLocale;//指定了内部码和外部码 内部unicode,外部utf-8
        std::locale utf8Locale(oldLocale,new boost::program_options::detail::utf8_codecvt_facet());/* create the wptree for save the UTF-8 data */boost::property_tree::wptree datum;datum.put(L"root.num", 100);datum.put(L"root.str", L"abc中文字符串");/* output XML string */std::wostringstream xmlOutputStream;xmlOutputStream.imbue(utf8Locale);boost::property_tree::xml_parser::write_xml(xmlOutputStream,datum);/* output JSON string */std::wostringstream jsonOutputStream;jsonOutputStream.imbue(utf8Locale);boost::property_tree::json_parser::write_json(jsonOutputStream,datum);/* read datum from JSON stream */boost::property_tree::wptree wptParse;std::wistringstream jsonIStream;jsonIStream.imbue(utf8Locale);jsonIStream.str(jsonOutputStream.str());boost::property_tree::json_parser::read_json(jsonIStream,wptParse);int num = wptParse.get<int>(L"root.num");std::wstring wstrVal = wptParse.get<std::wstring>(L"root.str");CString strMsg;strMsg.Format(_T("XML format:%s\nJSON format:%s\n个数,%d字符串%s"),xmlOutputStream.str().c_str(),jsonOutputStream.str().c_str(),num,wstrVal.c_str());MessageBox(NULL,strMsg,_T("提示"),MB_OK);}catch (...){MessageBox(NULL,_T("create boost::property_tree::wptree failed\n"),_T("提示"),MB_OK);}

由于我们的工程是unicode,但是boost支持的是utf-8,所以就需要utf8_codecvt_facet来进行转换。这个测试使用的过程,发现解析json的时候没问题,但是输出json串会有乱码的问题。

参考文章:http://blog.csdn.net/great3779/article/details/6977922/

http://blog.csdn.net/harbinzju/article/details/6631738

http://blog.sina.com.cn/s/blog_5218d56201009hzh.html

转载于:https://www.cnblogs.com/junyuz/archive/2013/05/23/3094559.html

采用boost中的property_tree库操作json,xml(vs2008,unicode)相关推荐

  1. C++ 使用Poco库操作 json 文件

    C++ 使用Poco库操作 json 文件 flyfish #include <string> #include <iostream> #include <sstream ...

  2. 关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决

    关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决 参考文章: (1)关于Laravel中使用response()方法调用json()返回数据un ...

  3. 用Python中的py2neo库操作neo4j,搭建简单关联图谱—基于家有儿女中的人物关系

         我第一次建立关联图谱用的是R语言,通过写代码帮公安挖掘团伙犯罪,并用图形展示团伙之间的关联关系.如有需要请关注 "阿黎逸阳的代码" 公众号的后续文章,会手把手教大家用R搭 ...

  4. nodejs中使用ioredis库操作redis

    1.初始化 const Redis = require('ioredis');// 创建 Redis 客户端实例,设置默认过期时间 const redis = new Redis({host: '12 ...

  5. Android中调用.so库操作步骤

    参考:http://www.cnblogs.com/anyanran/archive/2010/11/22/ndk1.html http://www.cnblogs.com/sevenyuan/p/4 ...

  6. maven中snapshot快照库与maven-metadata.xml

    在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...

  7. Poco库使用:操作Json格式数据

    文章目录 1.解析json字符串数据 2.生成Json格式的数据 3.操作Json数组 4.使用字符串流转换Json格式数据 5.使用键值检索Json结构中的数据 6.使用原始字符串避免字符转义 7. ...

  8. 深入浅出C/C++中的正则表达式库(二)——Boost.Regex

    写在前面:本文是<深入浅出C/C++中的正则表达式库>系列的第二篇,如果对本文感兴趣,相信你也会对<深入浅出C/C++中的正则表达式库--GNU Regex Library>感 ...

  9. Boost中的Timer的使用——计算时间流逝

    使用Boost中的Timer库计算程序的运行时间 程序开发人员都会面临一个共同的问题,即写出高质量的代码完毕特定的功能.评价代码质量的一个重要标准就是算法的运行效率,也就是算法的运行时间.为了可靠的提 ...

  10. 用python中的turtle库绘制一些有趣的图

    最近有个在读大学的女生,想要我帮忙用python画几个图,在画的过程中觉得有些图还挺有意思的,分享给大家.    1 图1    第一个图是蚊香,感兴趣的小伙伴可以自己尝试在python中用turtl ...

最新文章

  1. Python培训就业怎么样?
  2. 学计算机趣图,我的世界:六张玩家自制趣图,最后一张,想起了“骗”父母买电脑...
  3. Apache Flink 零基础入门(三)编写最简单的helloWorld
  4. PC网页实现九宫格切图功能
  5. 句法依存分析_复旦大学邱锡鹏教授:词法、句法分析研究进展综述
  6. linux phantomjs 环境变量,ChromeDriver和PhantomJS配置到$PATH
  7. Ztree加载完成后显示勾选节点
  8. 指针用作函数参数、指针型函数和函数指针
  9. html5直播api,HTML5 VideoAPI,打造自己的Web视频播放器
  10. ea 如何画bce备选架构图_GitHub - wongdean/rime-settings at 941ea079832ff211723bce1ce8e47344e527575e...
  11. Android 安装 GMS 方法
  12. VMware安装苹果虚拟机-亲测有效
  13. PostgreSQL10.1-CN-v0.1.chm中文手册
  14. 订单审批流程 数据库表设计
  15. 微信小程序语音识别java_微信小程序实现语音识别功能
  16. 稳定排序与不稳定排序方法
  17. python数据分析案例-利用生存分析Kaplan-Meier法与COX比例风险回归模型进行客户流失分析与剩余价值预测
  18. 结构体中元素引用—— “.“ 与 “->“
  19. 用 matplotlib 绘制 3D 时间序列动态图
  20. 20190915招商银行信用卡

热门文章

  1. action与jsp传值的几种方法
  2. JUC并发编程超详细详解篇
  3. 解决IIS7.5及以后中URL文件名有加号或空格导致显示404错误的问题
  4. 论文发表在什么期刊上_设计论文发表【期刊论文】设计论文发表
  5. mysql 库迁移工具_mysql数据库迁移,有什么工具或许办法
  6. 学python对excel有用吗_程序员必修课:为什么非要用Python做数据分析?Excel不好吗?...
  7. Python基础知识笔记(一)
  8. java泛型范围_Java泛型类型中的通配符参数在其范围内的正式条件是什么?
  9. Javascript特效:进度条
  10. Python:身份运算符is和==的区别