`
ribishuangba
  • 浏览: 292868 次
文章分类
社区版块
存档分类
最新评论

JSON 在C++中的使用

 
阅读更多

CppCMS的编译和使用

请参考我的相关文章。

将C++对象转换成JSON字符串

假定有一个类response,两个字段,一个是status,0代表正确。其他代表错误。另一个是message字段,表示操作结果的具体信息。代码如下:


现在需要将response对象的数据转换成JSON格式字符串。还需要写一个模板类来,代码如下:


好,现在编写调用代码,并查看运行结果。


运行结果:
{"message":"ok","status":0}
{"message":"unknown error","status":1}

cppcms::json::value类代码分析

之所以很容易就转换成JSON串,是因为使用了value类。现在来分析一下上面的调用代码里面是如何工作的。
1.cppcms::json::value(r1) 创建了匿名对象value,value的构造函数内部调用了set_value方法。参数v此时就是response对象。



2.set_value方法调用了traits<T>::set(this,v),这个就是前面我们重载的模板方法。


3.剩下的事情目的很明确了,需要将value对象的值转换成JSON字符串,然后输出到流中。Artyom重载了operator<<函数,底层实现函数如下:


上面的代码包含了很多细节,很多都可以独立成文描述。这里主要是为了搞明白cppcms::json::value内部的设计原理,便于更好的使用。就暂时追踪到这里。

将JSON字符串转换成C++对象

下面的代码演示了如何将流里面的JSON串放入value对象,然后通过get方法查找,"null"是假定找不到的时候的默认值。


也可以用更严格的get方法的重载,没有默认值,如果找不到就会抛出bad_cast异常。


我不喜欢写篇幅很大的文章,本篇主要描述如何使用,顺便挖了一下源代码。后面会陆续深挖CppCMS的源代码。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics