cocos2dx libjson

libjson下载 http://sourceforge.net/projects/libjson/

下载解压后改名成libjson,用到的是根目录下面的JSONOptions.h、libjson.h和_internal\Source下的文件。

导入头文件

#include "libjson.h"

如果是debug模式下,改下面那个参数

把#define JSON_DEBUG注释打开,c++编码把#define JSON_LIBRARY注释

如果是release模式则注释#define JSON_DEBUG

解析json

void readlibjson()
{
    /*{
        "RootA":"value in parent node",
            "childNode":[
        {
            "childA":"string value c1",
                "childB":"dsf c1"
        },
        {
            "childA":"string value c2",
                "childB":"dsf c2"
            }
            ]
    }*/
    unsigned long size;
    char* str = (char *)CCFileUtils::sharedFileUtils()->getFileData("testlibjson.json","r",&size);
    if (libjson::is_valid(str) == false)
    {
        delete str;
        str = NULL;
        CCLog("parse fail!");
        return ;
    }
    JSONNode rn = libjson::parse(str);
    delete str;
    str = NULL;
    CCLog("%s:%s",rn[0].name().c_str(),rn[0].as_string().c_str());
    int tmp = rn.size();
    CCLog("%d",tmp);
    for (int i = 0; i<rn[1].size(); i++)
    {
        JSONNode temp = rn[1][i];
        for (int j = 0; j< temp.size(); j++)
        {
            CCLog("%s:%s",temp[j].name().c_str(),temp[j].as_string().c_str());
        }

    }

    parseJSON(rn);//递归解析json的结构
    
}

//递归解析json的结构
void parseJSON(const JSONNode & n){
    JSONNode::const_iterator i = n.begin();
    while (i != n.end()){
        // recursively call ourselves to dig deeper into the tree
        if (i -> type() == JSON_ARRAY || i -> type() == JSON_NODE){
            parseJSON(*i);
        }
        if(i->name()!="" && i->as_string()!="")
        CCLog("%s:%s",i->name().c_str(),i->as_string().c_str());
        //increment the iterator
        ++i;
    }
}

输出:

RootA:value in parent node
2
childA:string value c1
childB:dsf c1
childA:string value c2
childB:dsf c2
RootA:value in parent node
childA:string value c1
childB:dsf c1
childA:string value c2
childB:dsf c2

 

创建json

void writelibjson()
{
    JSONNode n(JSON_NODE);
    n.push_back(JSONNode("RootA","value in parent node"));
    JSONNode c(JSON_ARRAY);
    c.set_name("childNode");

    JSONNode c1(JSON_NODE),c2(JSON_NODE);
    c1.push_back(JSONNode("childA","string value c1"));
    c1.push_back(JSONNode("childB","dsf c1"));
    c2.push_back(JSONNode("childA","string value c2"));
    c2.push_back(JSONNode("childB","dsf c2"));
    c.push_back(c1);
    c.push_back(c2);
    n.push_back(c);

    CCLog("==%s",n.write_formatted().c_str());

    //下面是输出到保存文件
    unsigned long size;
    char filePath[1024] = {'/0'};
    memset(filePath,0,sizeof(filePath));
    strcat(filePath,CCFileUtils::sharedFileUtils()->getWritablePath().c_str());
    strcat(filePath,"testlibjson.json");

    FILE* file = fopen(filePath,"w+");
    fwrite(n.write_formatted().c_str(),n.write_formatted().size(),1,file);
    fclose(file);

}

输出:

=={
"RootA" : "value in parent node",
"childNode" : [
{
"childA" : "string value c1",
"childB" : "dsf c1"
},
{
"childA" : "string value c2",
"childB" : "dsf c2"
}
]
}

 

posted @ 2015-02-05 15:43  百里抱木  阅读(319)  评论(0编辑  收藏  举报