cocos2d-x 使用libjson解析json

cocos2d-x自带了json解析方法,也可以很方便进行json操作,使用方法

1,引入json.h头文件

2,代码示例:

//"svrId":6,

//"name":"Andromeda&Pandora",

//"ip":"69.162.106.170",

//"port":8892,


//"capacity":20,

//"status":1,

//"language":"2",

//"payType":1,


//"playerNums":10230,

//"onlineNums":361,

//"cfg":"ac:y,s:1,h:y"

voidHelloWorld::parseJsonObjects(constchar* pJsonStr) {

   Json* jsonRoot = Json_create(pJsonStr);

   Json* jsonChild = jsonRoot->child;

   servers = newvector<constchar*>();

   while (jsonChild) {

       if (jsonChild->type==Json_Object) {

           Json* svrId = Json_getItem(jsonChild,"svrId");

           CCLog("svrId:%d", svrId->valueint);

           Json* name = Json_getItem(jsonChild,"name");

           CCLog("name:%s", name->valuestring);

            

            // push server's name into vector

           servers->push_back(name->valuestring);

            

           Json* ip = Json_getItem(jsonChild,"ip");

           CCLog("ip:%s", ip->valuestring);

           Json* port = Json_getItem(jsonChild,"port");

           CCLog("port:%d", port->valueint);

           Json* capacity = Json_getItem(jsonChild,"capacity");

           CCLog("capacity:%d", capacity->valueint);

            

           Json* status = Json_getItem(jsonChild,"status");

           CCLog("status:%d", status->valueint);

           Json* language = Json_getItem(jsonChild,"language");

           CCLog("language:%s", language->valuestring);

           Json* payType = Json_getItem(jsonChild,"payType");

           CCLog("payType:%d", payType->valueint);

            

           Json* playerNums = Json_getItem(jsonChild, "playerNums");

           CCLog("playerNums:%d", playerNums->valueint);

           Json* onlineNums = Json_getItem(jsonChild, "onlineNums");

           CCLog("onlineNums:%d", onlineNums->valueint);

           Json* cfg = Json_getItem(jsonChild,"cfg");

           CCLog("cfg:%s", cfg->valuestring);

            

           printf("\n\r");

        }

        jsonChild = jsonChild->next;

    }

    CCLog("SERVERSLENGTH:%ld",servers->size());

   Json_dispose(jsonRoot);

}


自带库能够快速解析json,但是如果想拼json,json.h无法实现,下面演示使用Libjson解析json:

1,下载Libjson库,最新版本7.6.1

2,引入文件到工程项目里引入方法,直接copy libjson中 _internal文件夹,JSONOptions.h, libjson.h到自建文件夹,

然后把文件夹复制到工作目录里头lib中,添加到项目中去

3,引用完毕后编译会报一个错误,这中因为Demo中引用路径有些问题,直接删掉_internal文件夹中的两Demo


基本使用方法:

a、通用解析方法:

char *json = "{\"RootA\":\"Value in parent node\",\"ChildNode\":{\"ChildA\":\"String Value\",\"ChildB\":42}}";
JSONNODE *n = json_parse(json);
ParseJSON(n);
json_delete(n);

void ParseJSON(JSONNODE *n){
    if (n == NULL){
        printf("Invalid JSON Node\n");
        return;
    }
 
    JSONNODE_ITERATOR i = json_begin(n);
    while (i != json_end(n)){
        if (*i == NULL){
            printf("Invalid JSON Node\n");
            return;
        }
 
        // recursively call ourselves to dig deeper into the tree
        if (json_type(*i) == JSON_ARRAY || json_type(*i) == JSON_NODE){
            ParseJSON(*i);
        }
 
        // get the node name and value as a string
        json_char *node_name = json_name(*i);
 
        // find out where to store the values
        if (strcmp(node_name, "RootA") == 0){
            json_char *node_value = json_as_string(*i);
            strcpy(rootA, node_value);
            json_free(node_value);
        }
        else if (strcmp(node_name, "ChildA") == 0){
            json_char *node_value = json_as_string(*i);
            strcpy(childA, node_value);
            json_free(node_value);
        }
        else if (strcmp(node_name, "ChildB") == 0)
            childB = json_as_int(*i);
 
        // cleanup and increment the iterator
        json_free(node_name);
        ++i;
    }
}

b,通用拼接json:

数组:

JSONNODE *n = json_new(JSON_NODE);
json_push_back(n, json_new_a("RootA", "Hello World"));
JSONNODE *c = json_new(JSON_ARRAY);
json_set_name(c, "ArrayOfNumbers");
json_push_back(c, json_new_i(NULL, 16));
json_push_back(c, json_new_i(NULL, 42));
json_push_back(c, json_new_i(NULL, 128));
json_push_back(n, c);
json_char *jc = json_write_formatted(n);
printf("%s\n", jc);
json_free(jc);
json_delete(n);

{
    "RootA" : "Hello World",
    "ArrayOfNumbers" : [
        16,
        42,
        128
    ]
}

非数组:

JSONNODE *n = json_new(JSON_NODE);
json_push_back(n, json_new_a("RootA", "Value in parent node"));
JSONNODE *c = json_new(JSON_NODE);
json_set_name(c, "ChildNode");
json_push_back(c, json_new_a("ChildA", "String Value"));
json_push_back(c, json_new_i("ChildB", 42));
json_push_back(n, c);
json_char *jc = json_write_formatted(n);
printf("%s\n", jc);
json_free(jc);
json_delete(n);

{
    "RootA" : "Value in parent node",
    "ChildNode" : {
        "ChildA" : "String Value",
        "ChildB" : 42
    }
}

上面这代码也可以在文档中找到   .


你可能感兴趣的:(json,cocos2d-x,Cocos,coco2d,libjson)