vs2017使用json.hpp文件

vs2017使用json.hpp文件,第1张

VS2017里新建一个空的控制台程序(用作测试jsoncpp是否可用),名为。 TestJSON解压下载好的文件。jsoncpp-src-050targz将 jsoncpp-src-050\include 目录下的json文件夹拷贝至 TestJSON 工程目录下将 jsoncpp-src-050\src\lib_json 目录下的所有h, cpp 文件全部拷贝至 TestJSON 工程目录下在VS201里引入工程目录下刚刚从 jsoncpp-src-050 导入的文件,如图1在VS2010里新建maincpp来测试jsoncpp是否可用。
Visual Studio 2017是微软于2017年3月8日正式推出的新版本,是迄今为止最具生产力的Visual Studio版本。其内建工具整合了NET Core、Azure应用程序、微服务(microservices)、Docker容器等所有内容。

JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择
JSON的全称为:JavaScript Object Notation ,顾名思义,JSON是用于标记javascript对象的,详情参考

选择第三方库JsonCpp来解析json,JsonCpp是比较出名的c++解析库,在json官网也是首推的。
JsonCpp简介
JsonCpp主要包含三种类型的class:Value Reader Writer。
jsoncpp中所有对象、类名都在namespace json中,包含jsonh即可。
注意: Json::Value只能处理ANSI类型的字符串,如果C++程序使用Unicode编码的,最好加一个Adapt类来适配。
下载和编译
本文运行环境是: Redhat 55 + g++version 461 + GNU Make 381 + jsoncpp-050
下载地址是:
解压之后得到jsoncpp-src-050文件夹,我们只需要jsoncpp的头文件和cpp文件,其中jsonscpp的头文件位于jsoncpp-src-050includejson,jsoncpp的cpp文件位于jsoncpp-src-050srclib_json。
这里我列出我们的工作目录:
jsoncpp/ //工作目录
|-- include //头文件根目录
||-- json //json头文件,对应jsoncpp-src-050includejson
|-- src //cpp源码文件根目录
|-- json //jsoncpp源码文件,对应jsoncpp-src-050srclib_json
|-- maincpp //我们的主函数,调用jsoncpp的示例代码
|-- makefile //makefile,不用我们多说了吧,不懂请看我博客的makefile最佳实践
反序列化Json对象
假设有一个json对象如下:
{ "name": "json″, "array": [ { "cpp": "jsoncpp" }, { "java": "jsoninjava" }, { "php": "support" } ] }
我们要实现这个json的反序列号代码如下:
voidreadJson() { usingnamespacestd; std::stringstrValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}"; Json::Reader reader; Json::Value value; if(readerparse(strValue, value)) { std::stringout= value["name"]asString(); std::cout <<out<<std::endl; constJson::Value arrayObj = value["array"]; for(unsigned inti = 0;i <arrayObjsize(); i++) { if(!arrayObj[i]isMember("cpp")) continue; out= arrayObj[i]["cpp"]asString(); std::cout <<out; if(i != (arrayObjsize() - 1)) std::cout <<std::endl; } } }
序列化Json对象
voidwriteJson() { usingnamespacestd; Json::Value root; Json::Value arrayObj; Json::Value item; item["cpp"] = "jsoncpp"; item["java"] = "jsoninjava"; item["php"] = "support"; arrayObjappend(item); root["name"] = "json"; root["array"] = arrayObj; roottoStyledString(); std::stringout= roottoStyledString(); std::cout <<out<<std::endl; }

//判断map1中的key时候出现在map2中,出现的存入list集合中 List list = new ArrayList(); Map map1 = new HashMap(); Map map2 = new HashMap(); Set set1 =map1keySet(); Iterator it = set1iterator(); while(ithasNext()){ Object obj = i

优点: 这个库使用了大量的C++ 11标准元素,另外库的设计上,也符合STL的一些标准,可配置性比较强;单文件方式,引用也比较方便;使用上,也有其独到的地方,更接近JSON的本质;此外性能上还是不错的,只是比rapidjson差,比libjson,jsoncpp之流还是强了不少
缺点: 不支持VS2013,并且看作者的意思,他也不会去兼容VS2013,但作为一个Win7统治桌面 *** 作系统的时代,VS2013一定会是一个主流的编译器,这一点说不过去;代码上,Morden C++的大量使用,对于一般的程序员来说,太不友好了;性能,好吧,他的确比rapidjson慢了5~10倍。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13391676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存