Cocos2d-x 3.0 加入了rapidjson库用于json解析。位于external/json下。
rapidjson 项目地址:http://code.google.com/p/rapidjson/
wiki:http://code.google.com/p/rapidjson/wiki/UserGuide
使用rapidjson解析json串
-
引入头文件
12#include "json/rapidjson.h"
#include "json/document.h"
-
json解析
2
345678910111213std::string str =
"{\"hello\" : \"word\"}"
;
CCLOG(
"%s\n"
,str.c_str());
rapidjson::Document d;
d.Parse<0>(str.c_str());
{
CCLOG(
"GetParseError %s\n"
,d.GetParseError());
}
if
(d.IsObject() && d.HasMember(
"hello"
)) {
CCLOG(
"%s\n"
,d[
"hello"
].GetString());
//打印获取hello的值
}
-
打印结果
3
cocos2d: {
"hello"
:
"word"
}
cocos2d: word
注意:只支持标准的json格式,一些非标准的json格式不支持。
一些常用的解析方法需要自己封装。注意判断解析节点是否存在。
使用rapidjson生成json串
-
引入头文件
4
#include "json/document.h"
#include "json/writer.h"
#include "json/stringbuffer.h"
using
namespace
rapidjson;
-
生成json串
13
141516171819rapidjson::Document document;
document.SetObject();
rapidjson::Document::AllocatorType& allocator = document.GetAllocator();
rapidjson::Value array(rapidjson::kArrayType);
rapidjson::Value object(rapidjson::kObjectType);
object.AddMember(
"int"
,1,allocator);
object.AddMember(
"double"
,1.0,allocator);
object.AddMember(
"bool"
,
true
,allocator);
object.AddMember(
"hello"
,
"你好"
,allocator);
array.PushBack(object,allocator);
document.AddMember(
"json"
,
"json string"
,allocator);
document.AddMember(
"array"
,array,allocator);
StringBuffer buffer;
rapidjson::Writer<StringBuffer> writer(buffer);
document.Accept(writer);
CCLOG(
"%s"
,buffer.GetString());
-
打印结果
1 @H_670_404@
cocos2d: {
"json"
:
"json string"
,
"array"
:[{
"int"
:1,
"double"
:1,
"bool"
:
"hello"
:
"你好"
}]}