c++编写json解析类(一)

2014-11-24 09:52:14 · 作者: · 浏览: 0

好久没有更新博客了,今天就将我之前写的一些代码陆续发上来。

json.h

[cpp]
#include
#include
using namespace std;

class CJson
{
public:
enum TYPE{STRING,LONG,ARRAY,OBJECT,BOOL,NAMEDOBG,STRINGA,LONGA,ARRAYA,OBJECTA,BOOLA,NAMEDOBGA};
typedef struct _NODE
{
friend CJson;
string m_key;
TYPE type;
string m_strVal;
bool m_boolVal;
long m_longVal;
string m_objVal;
_NODE(){memset(this,0,sizeof(_NODE));}
_NODE* GetChild(){return m_child;}
_NODE* GetNext(){return m_next;}
_NODE* GetParent(){return m_parent;}
_NODE* Get(int index)
{
NODE* n=m_child;
for(int i=0;i {
if(n==0)
{
return 0;
}
n=n->m_next;
}
return n;
}
_NODE* Get(char* key)
{
NODE* n=m_child;
while(n)
{
if(n->m_key==key)
{
return n;
}
n=n->m_next;
}
return 0;
}
_NODE* Append(TYPE type,char* key,char* sVal,long nVal)
{
NODE *node=new NODE;
node->type=type;
if(type==STRING)
{
node->m_key=key;
node->m_strVal=sVal;
}
else if (type==LONG)
{
node->m_key=key;
node->m_longVal=nVal;
}
else if(type==OBJECT)
{
node->m_key=key;
}
else if (type==ARRAY)

{
node->m_key=key;
}
else if(type==STRINGA)
{
node->m_strVal=sVal;
}
else if (type==LONGA)
{
node->m_longVal=nVal;
}
else if(type==OBJECTA)
{

}
else if (type==ARRAYA)
{

}
if(!m_child)
{
m_child=node;
node->m_parent=this;
}
else
{
NODE* n=m_child;
while (n->m_next)
{
n=n->m_next;
}
n->m_next=node;
node->m_parent=this;
}
return node;
}
_NODE* Remove(_NODE* node) //remove child
{
if(!node)
{
return 0;
}
NODE* nNext=node->m_next,*n=m_child;
if(node==n)
{
delete[] m_child;
m_child=0;
}
else
{
while(n->m_next!=node)
{
n=n->m_next;
}
n->m_next=node->m_next;
delete node;
}
return nNext;
}
_NODE* Remove(int index) //remove array child
{
if(index<0)
return 0;
NODE* n=m_child,*n1;
if(index==0)