JSON学习笔记(格式/第三方库jsonCpp与libJson的配置和使用) cocos2d-x
来源:互联网 发布:属于淘宝禁售商品刀 编辑:程序博客网 时间:2024/04/25 12:07
JSON格式
[{key:value,key2:value2},{key3:value3}]
1.[]里面的是数组
2.{}里面的是集合
3.用:隔开key和value
4.逗号分割每个数据单元,数据单元分为数组和元数据(即一个key或者value)
例子
简单的集合
{"name":"norton","age":100}
数组里面可以有集合
[{"name":"Dark","age":20},{"name":"Norton","age",40}]
集合里面可以包含数组
[{"name":"Dark","age":20},{"name":"Norton","age",40,
[{"name":"norton","age":100},{"name":"norton","age":100}]
}]
value可以为数组
{"array",[{"name":"Dark","age":20},{"name":"Norton","age",40}]}
JSON第三方库:
1.JsonCpp
http://sourceforge.net/projects/jsoncpp/
JsonCpp下载
win32中的使用方法:
1)在项目中,添加现有文件->导入include和src的文件
2)如果是引入别人的项目,就要自己配置头文件,并重新添加文件,否则可能会找不到文件
2.libJson——有多个语言版本,C++,JAVA,C#等(JSON只i是一种命名规则,因此可以通过多种语言处理)
http://sourceforge.net/projects/libjson/ libJson download
这个库也是很常用的。配置如下:
1)解压文件后,添加JSONOptions.h , libjson.h
2)然后把D:\cocos2d-x\tools\libjson_7.6.1\libjson\_internal\Source下的所有文件添加到项目中。以上两步可以新建一个文件夹libJson进行。
3)注意,libJson有两个使用库,C/C++,编译时候要指定。且win32下,默认是release而不是Debug模式的。所以Debug模式下会报错。
4) 如3所述,要在加载的头文件中,找到头文件JSONOptions.h
搜索#define JSON_DEBUG,保持打开(即不要注释该行).但如果你要发布,进行release编译,就要注释该行
搜索#define JSON_LIBRARY,如果要用C++编译,则注释该行。因为cocos2d-x下使用的是C++,所以要注释该行(默认是不注释的)
这样就配置完毕了
JsonCpp实例
void HelloWorld::readJsonCpp(){unsigned long size; char* file = (char*)CCFileUtils::sharedFileUtils()->getFileData("testjson.json","r", &size);Json::Reader reader;Json::Value root;if (!reader.parse(std::string(file),root, false)){return ;}std::string name = root["name"].asString();int age = root["age"].asInt();CCLOG("name=%s",name.c_str());CCLOG("age=%d",age);////////////////////////////////////file = (char*)CCFileUtils::sharedFileUtils()->getFileData("testjson2.json","r", &size);if (!reader.parse(std::string(file),root, false)){return ;}size = root.size();for (int i=0; i<size; ++i){name = root[i]["name"].asString();age = root[i]["age"].asInt();CCLOG("name=%s,age=%d",name.c_str(),age);}}void HelloWorld::writeJsonCpp(){Json::Value root;Json::FastWriter writer;Json::Value person;person["name"] = "hello world";person["age"] = 100;root.append(person);std::string json_file = writer.write(root);char filePath[1024]= {'\0'};memset(filePath,0,sizeof(filePath));strcat(filePath,CCFileUtils::sharedFileUtils()->getWriteablePath().c_str());strcat(filePath,"writeJsonCpp.json");FILE* file = fopen(filePath,"w+");fwrite(json_file.c_str(),json_file.size(),1,file);fclose(file);}
libJson实例
testlibjson.json内容如下
{"RootA" : "Value in parent node","ChildNode" : [{"ChildA" : "String Value c1","ChildB" : "dsf c1"},{"ChildA" : "String Value c2","ChildB" : "dsf c2"}]}
void HelloWorld::readLibJson(){//read jsonunsigned long size; char* str = (char*)CCFileUtils::sharedFileUtils()->getFileData("testlibjson.json","r", &size);if(libjson::is_valid(str)==false) { delete str; str=NULL; printf("Parse faild!\n"); system("pause"); exit(0); } JSONNode rn=libjson::parse(str);delete str; str=NULL; 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());}}}void HelloWorld::writeLibJson(){//write jsonJSONNode 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()); //write_farmatted可以获取n的内容unsigned long size; char filePath[1024]= {'\0'};memset(filePath,0,sizeof(filePath));strcat(filePath,CCFileUtils::sharedFileUtils()->getWriteablePath().c_str());strcat(filePath,"testlibjson.json");FILE* file = fopen(filePath,"w+");fwrite(n.write_formatted().c_str(),n.write_formatted().size(),1,file); //write_farmtted可以获取文档内容的大小fclose(file);}
- JSON学习笔记(格式/第三方库jsonCpp与libJson的配置和使用) cocos2d-x
- JSON学习笔记(格式/第三方库jsonCpp与libJson的配置和使用) cocos2d-x
- Cocos2d-x学习(五):cocos2d-x解析json(使用libjson库)
- Cocos2d-x学习(五):cocos2d-x解析json(使用libjson库)
- Cocos2d-x学习(五):cocos2d-x解析json(使用libjson库)
- cocos2d-x解析json(使用libjson库)
- c++ 第三方json解析库 jsoncpp的使用
- c++ 第三方json解析库 jsoncpp的使用
- cocos2d-x使用libjson和tinyxml解析json和xml的代码示例
- cocos2d-x 使用libjson解析json
- JSON格式解析和libjson使用简介(cJson格式)
- JSON格式解析和libjson使用简介(cJson格式)
- cocos2d-x 使用libjson解析json--------------cocos2d-x 3.0正式版本(7.6)
- JSON格式解析和libjson使用简介
- JSON格式解析和libjson使用简介
- cocos2d-x使用第三方的so库文件
- Android非空格式验证框架Validation的使用---第三方库学习笔记(四)
- Andorid中使用Gson和Fast-json解析库解析JSON数据---第三方库学习笔记(二)
- java 反射
- Selenium 处理 modal 对话框(转)
- php中自定义自动加载函数
- 计算机科学中最重要的32个算法
- 招致创业失败的七个错误
- JSON学习笔记(格式/第三方库jsonCpp与libJson的配置和使用) cocos2d-x
- [Leetcode]Best Time to Buy and Sell Stock III
- hibernate 特殊情况下 属性找不到get方法的解决方案
- CF 196B(Psychos in a Line-单调队列贪心)
- 这次真的谈谈如何管理一流人才
- error RC1004: unexpected end of file found处理方法
- 11年写的一篇文章----智能终端安全现状及前景展望
- spring + struts2 + hibernate 集成
- Android资源文件及文件夹介绍