博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Jsoncpp源代码编译与解析Json
阅读量:6434 次
发布时间:2019-06-23

本文共 2604 字,大约阅读时间需要 8 分钟。

1.Json 数据表示方式介绍

  这个可以看之前的一个文章里面有说明:

2.C++ Jsoncpp

2.1 Jsoncpp介绍

  (1)JsonCpp主要包含三种类型的class:Value Reader Writer;

    Json::Value 是jsoncpp 中最基本、最重要的类,用于表示各种类型的对象,jsoncpp 支持的对象类型可见 Json::ValueType 枚举值。

    Json::Reader 是用于读取的,说的确切点,是用于将字符串转换为 Json::Value 对象的。

    Json::Writer 类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter、Json::StyledWriter、Json::StyledStreamWriter。

  (2)Jsoncpp中所有对象、类名都在namespace json中,包含json.h即可

2.2 Jsoncpp的下载与编译

  下载下来的jsoncpp必须要编译才能使用,在ubuntut上使用如下:

apt-get install scons####下载jsoncpp-src-0.5.0.tar.gz######tar -xvzf jsoncpp-src-0.5.0.tar.gzcd jsoncpp-src-0.5.0scons platform=linux-gcc

  gcc版本是4.6的,上面的命令执行完后,会在jsoncpp-src-0.5.0/libs/linux-gcc-4.6目录下面生成库文件:

  (1)libjson_linux-gcc-4.6_libmt.a

  (2)libjson_linux-gcc-4.6_libmt.so

  之后,将动态链接库libjson_linux-gcc-4.6_libmt.so,添加到搜索路径中,参照:

3.Jsoncpp使用代码示例

3.1 程序解析json数据

 解析下面的文件JsonText,文件如下:

{    "name": "json",    "array": [           "123",        "456",        "789"     ]}

代码(c.cpp):

1 #include "json/json.h" 2 #include 
3 #include
4 #include
5 #include
6 using namespace std; 7 int main() 8 { 9 ifstream is;10 is.open ("JsonText", std::ios::binary );11 Json::Reader reader;12 Json::Value root;13 if(reader.parse(is,root)) ///root保存整个Json对象的value14 {15 if(!root["name"].isNull())16 {17 cout<
<
View Code

 编译、链接、执行:

  g++ c.cpp -I ./include/ -L./libs/linux-gcc-4.6/ -ljson_linux-gcc-4.6_libmt -o C

  ./C

执行结果:

  json

  123

  456

  789

3.2 程序生成json数据

 代码:

1 #include 
2 #include
3 #include "json/json.h" 4 5 int main(void) 6 { 7 Json::Value root; 8 Json::Value arrayObj; 9 Json::Value item;10 11 for (int i = 0; i < 2; i ++)12 {13 item["key"] = i;14 //arrayObj.append(item); ///给arrayObj中添加元素(arrayObj变为数组)15 arrayObj.append(i); ///给arrayObj中添加元素(arrayObj变为数组)16 }17 18 root["key1"] = "value1"; ///给root中添加属性(arrayObj变为map)19 root["key2"] = "value2";20 root["array"] = arrayObj;21 //root.toStyledString();22 std::string out = root.toStyledString(); ///转换为json格式字符串23 std::cout << out << std::endl;24 return 0;25 }
View Code

 编译、链接、执行:

  g++ b.cpp -I ./include/ -L./libs/linux-gcc-4.6/ -ljson_linux-gcc-4.6_libmt -o B

  ./B

执行结果:

{   "array" : [ 0, 1 ],   "key1" : "value1",   "key2" : "value2"}

 

部分参考:

http://www.cnblogs.com/logicbaby/archive/2011/07/03/2096794.html

http://www.softwareace.cn/?p=185

你可能感兴趣的文章
提高调试.net cf程序效率一些技巧
查看>>
boost::regex
查看>>
Ogre 2011-11-30
查看>>
一起谈.NET技术,.NET异步编程:IO完成端口与BeginRead
查看>>
Python 3.2 beta 2 发布
查看>>
[转]ASP.NET Core 指定环境发布(hosting environment)
查看>>
SOCKET CLOSE_WAIT 搜集
查看>>
Paris Traceroute
查看>>
李洪强漫谈iOS开发[C语言-038]-if else if语句
查看>>
深入理解脚本化CSS系列第五篇——动态样式
查看>>
【温故而知新-Javascript】使用 Ajax(续)
查看>>
BZOJ 4706: B君的多边形 找规律
查看>>
疯狂了!当游戏爱上MongoDB会怎么样???
查看>>
iOS 最全面试题
查看>>
我们工作的意义到底在哪?
查看>>
SpringBoot 中 @RequestBody的正确使用方法
查看>>
ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Au...
查看>>
zabbix触发的多条件判断表达式
查看>>
解决JBoss只能通过localhost访问不能通过IP的问题
查看>>
Windows下Oracle的下载与安装
查看>>