Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/fishedee/FishJsonCpp

C++结构体自动化相互转换json
https://github.com/fishedee/FishJsonCpp

Last synced: about 2 months ago
JSON representation

C++结构体自动化相互转换json

Awesome Lists containing this project

README

        

#C++ class to json
##概述
从idl中生成C++ class,而C++ class支持jsoncpp的tojson与fromjson操作,从而实现自动化json序列化与反序列化C++结构体的目的。

##例子
###idl定义
idl保存到in.h中


#include
#include
#include
#include
#include
#include
//京东库存服务的IDL

namespace jd{
namespace core{
namespace stock{

class CLockInventoryForPaiPaiReq{
//商品id
std::string productId;
};
class CLockInventoryForPaiPaiResp{
//结果
int32_t retCode;
};

}
}
}

###自动生成
./fishjson < in.h > out.h

###生成结果


#ifndef __JD_CORE_STOCK_H__
#define __JD_CORE_STOCK_H__

#include
#include "app_platform/intf_serializable.h"
#include "c2cplatform/library/the3/jsoncpp64/reader.h"
#include "c2cplatform/library/the3/jsoncpp64/value.h"
#include "c2cplatform/library/the3/jsoncpp64/writer.h"

#include
#include
#include
#include
#include
#include

namespace jd{
namespace core{
namespace stock{

class CLockInventoryForPaiPaiReq{
private:
std::string m_productId;
bool m_productId_u;
public:
CLockInventoryForPaiPaiReq():
m_productId(),
m_productId_u(false){
}
~CLockInventoryForPaiPaiReq(){
}
public:
const std::string& GetProductId()const{
return m_productId;
}
bool IsProductIdSet()const{
return m_productId_u;
}
void SetProductId( const std::string& productId){
m_productId = productId;
m_productId_u = true;
}
public:
void DumpData( std::ostream& os , int32_t indent = 0 )const{
DumpDataTree( os ,indent );
}
void DumpDataTree( std::ostream& os ,int32_t indent = 0 )const{
g_pprint(os,"productId",m_productId,indent);
}
public:
Json::Value ToJson()const{
Json::Value root;
std::stringstream ss;

Json::Value root_1;
if( m_productId_u == true ){
root_1 = Json::Value(m_productId);
}
ss.str("");ss<<"productId";
root[ss.str()] = root_1;

return root;
}
void FromJson( const Json::Value& root ){
if( root.isObject() == false ){
return;
}

if( root["productId"].isString() == true ){
m_productId = root["productId"].asString();
m_productId_u = true;
}

}
};
class CLockInventoryForPaiPaiResp{
private:
int32_t m_retCode;
bool m_retCode_u;
public:
CLockInventoryForPaiPaiResp():
m_retCode(),
m_retCode_u(false){
}
~CLockInventoryForPaiPaiResp(){
}
public:
const int32_t& GetRetCode()const{
return m_retCode;
}
bool IsRetCodeSet()const{
return m_retCode_u;
}
void SetRetCode( const int32_t& retCode){
m_retCode = retCode;
m_retCode_u = true;
}
public:
void DumpData( std::ostream& os , int32_t indent = 0 )const{
DumpDataTree( os ,indent );
}
void DumpDataTree( std::ostream& os ,int32_t indent = 0 )const{
g_pprint(os,"retCode",m_retCode,indent);
}
public:
Json::Value ToJson()const{
Json::Value root;
std::stringstream ss;

Json::Value root_1;
if( m_retCode_u == true ){
root_1 = Json::Value(m_retCode);
}
ss.str("");
ss<<"retCode";
root[ss.str()] = root_1;

return root;
}
void FromJson( const Json::Value& root ){
if( root.isObject() == false ){
return;
}

if( root["retCode"].isInt() == true ){
m_retCode = root["retCode"].asInt();
m_retCode_u = true;
}

}
};

}
}
}

#endif

###接口
json序列化与反序列化操作


int main(){
CLockInventoryForPaiPaiReq req;
Json::Value value1,value2;
value1 = req.toJson();
req.fromJson( value2 );
return 0;
}