rapidjson宏定义封装

来源:互联网 发布:淘宝黑刷干货 编辑:程序博客网 时间:2024/06/08 02:21

代码块

生成JSon字符串宏定义:

define BeginJSonor() \

{   rapidjson::Document     JSonDoc;    \    rapidjson::Document::AllocatorType & allocator = JSonDoc.GetAllocator();    \    rapidjson::Value Obj(rapidjson::kObjectType);   \

define JSonorObject() \

    rapidjson::Value Obj(rapidjson::kObjectType);   \

define JSonorString(Member, Texter) \

{   assert(typeid(CString) == typeid(Texter));  \    std::string strText = CStringA(Texter); \    rapidjson::Value StringObj(rapidjson::kStringType); \    StringObj.SetString(strText.c_str(), strText.size(), allocator);    \    Obj.AddMember(Member, StringObj, allocator);    };  \

define JSonorInt(Member, Intor) \

{   assert(typeid(int) == typeid(Intor));   \    Obj.AddMember(Member, Intor, allocator);    };  \

define JSonorDouble(Member, Doubler) \

{   assert(typeid(double) == typeid(Doubler));  \    Obj.AddMember(Member, Doubler, allocator);  };  \

define JSonorBool(Member, Booler) \

{   assert(typeid(bool) == typeid(Booler)); \    Obj.AddMember(Member, Booler, allocator);   };  \

define BeginJSonorArray() \

{   rapidjson::Value ObjArray(rapidjson::kArrayType);   \

define JSonorItemObject() \

    rapidjson::Value ItemObj(rapidjson::kObjectType);   \

define JSonorItemString(Member, Texter) \

{   assert(typeid(CString) == typeid(Texter));  \    std::string strText = CStringA(Texter); \    rapidjson::Value StringObj(rapidjson::kStringType); \    StringObj.SetString(strText.c_str(), strText.size(), allocator);    \    ItemObj.AddMember(Member, StringObj, allocator);    };  \

define JSonorItemInt(Member, Intor) \

{   assert(typeid(int) == typeid(Intor));   \    ItemObj.AddMember(Member, Intor, allocator);    };  \

define JSonorItemDouble(Member, Doubler) \

{   assert(typeid(double) == typeid(Doubler));  \    ItemObj.AddMember(Member, Doubler, allocator);  };  \

define JSonorItemBool(Member, Booler) \

{   assert(typeid(bool) == typeid(Booler)); \    ItemObj.AddMember(Member, Booler, allocator);   };  \

define JSonorPushBack() \

    ObjArray.PushBack(ItemObj, allocator);  \

define EndJSonorArray(Member) \

    Obj.AddMember(Member, ObjArray, allocator); \            };  \

define EndJSonor() \

    rapidjson::StringBuffer buf;    \    rapidjson::Writer<rapidjson::StringBuffer>  writer(buf);    \    Obj.Accept(writer); \    return buf.GetString(); \};  \

解析JSon字符串:

define BeginJSonParser() \

{                       \    rapidjson::Document JSonDoc;    \

define JSonParse(JSonText) \

    JSonDoc.Parse<0>(JSonText.c_str()).HasParseError()  \

define JSonHasMember(Member) \

    JSonDoc.HasMember(Member)   \

define JSonGetInt(Member) \

    JSonDoc[Member].GetInt()    \

define JSonGetString(Member) \

    JSonDoc[Member].GetString() \

define JSonGetBool(Member) \

    JSonDoc[Member].GetBool()   \

define JSonGetDouble(Member) \

    JSonDoc[Member].GetDouble() \

define BeginParserArray(Member) \

    {   \        rapidjson::Value & ArrayObj = JSonDoc[Member];  \

define IfArray() \

        if(ArrayObj.IsArray())  \        {   \

define TraverseArray() \

            for(rapidjson::SizeType i = 0; i < ArrayObj.Size(); i++)    \            {   \                rapidjson::Value & ItemObj = ArrayObj[i];   \

define ArrayHasMember(Member) \

                ItemObj.HasMember(Member)   \

define ArrayGetInt(Member) \

                ItemObj[Member].GetInt()    \

define ArrayGetString(Member) \

                ItemObj[Member].GetString() \

define ArrayGetBool(Member) \

                ItemObj[Member].GetBool()   \

define ArrayGetDouble(Member) \

                ItemObj[Member].GetDouble() \

define EndTraverse() \

            }   \

define EndIf() \

        }   \

define EndParserArray() \

    };  \

define EndJSonParser() \

};  \

目录

[TOC]来生成目录:

      • 代码块
  • define BeginJSonor
  • define JSonorObject
  • define JSonorStringMember Texter
  • define JSonorIntMember Intor
  • define JSonorDoubleMember Doubler
  • define JSonorBoolMember Booler
  • define BeginJSonorArray
  • define JSonorItemObject
  • define JSonorItemStringMember Texter
  • define JSonorItemIntMember Intor
  • define JSonorItemDoubleMember Doubler
  • define JSonorItemBoolMember Booler
  • define JSonorPushBack
  • define EndJSonorArrayMember
  • define EndJSonor
  • define BeginJSonParser
  • define JSonParseJSonText
  • define JSonHasMemberMember
  • define JSonGetIntMember
  • define JSonGetStringMember
  • define JSonGetBoolMember
  • define JSonGetDoubleMember
  • define BeginParserArrayMember
  • define IfArray
  • define TraverseArray
  • define ArrayHasMemberMember
  • define ArrayGetIntMember
  • define ArrayGetStringMember
  • define ArrayGetBoolMember
  • define ArrayGetDoubleMember
  • define EndTraverse
  • define EndIf
  • define EndParserArray
  • define EndJSonParser
      • 目录

例子:
1、生成JSon字符串
BeginJSonor();
JSonorString(_T(“JobID”), CString(lpszId));
JSonorString(_T(“JobPath”), CString(srtPath));
JSonorInt(_T(“JobPage”), page);
JSonorDouble(_T(“JobProgress”) ,rate);
EndJSonor();

2、解析JSon字符串
BeginJSonParser()
if (!JSonParse(strJSonText))
{
if(JSonHasMember(_T(“JobID”) && JSonHasMember(“JobPath”))
{
CString strJobId = CString(JSonGetString(_T(“JobID”)));
CString strJobPath = CString(JSonGetString(_T(“JobPath”)));
}
if(JSonHasMember(_T(“JobPage”) && JSonHasMember(_T(“JobProgress”)))
{
int Page = JSonGetInt(_T(“JobPage”));
double progress = JSonGetDouble(_T(“JobProgress”));
}
}
EndJSonParser()

说明:
此宏定义适合简单的json字符串,太复杂容易出错。简单总结下,希望以后还能用到。

0 0
原创粉丝点击