课程表

入门与环境搭建

简单控件的使用

视图控制

调用、存储、网络和动画

其他控件的使用

工具箱
速查手册

json解析

当前位置:免费教程 » 移动开发 » CrossApp

CrossApp使用lib_json来解析json文件。lib_json已经加入了libExtensions下,我们在CrossApp中使用非常的便捷。


首先引入头文件

  1. #include "CrossAppExt.h"
  2. using namespace CSJson;


我们先熟悉一下几个类名和函数

  1. /*
  2. Value:写过脚本、弱语言的童鞋应该很清楚var,其他Value 和var一个道理,都是可以表示很多数据类型的数据类型。
  3. 这话可能比较绕,简单说就是Value你可以理解可以是int 也可以是string 也可以是其他数据类型。
  4. 当然定义 Value value,只是个定义,还没有决定其数据类型,如果你Value value =10;那么value 就是个整型
  5. 在用于JSON时,我们常表示为一个map,其中包括 key-value,键值对
  6. 其中Value 中包括一些将其转为基础数据类型的6个方法,如下:
  7. value.asCString();
  8. value.asString();
  9. value.asBool();
  10. value.asDouble();
  11. value.asInt();
  12. value.asUInt();
  13. */
  14. Value map;
  15. /*
  16. FastWriter:起作用是将Value数据编码成JSON格式的数据
  17. 常用函数:write(<#const Json::Value &root#>)
  18. */
  19. Json::FastWriter write;
  20. /*
  21. Value:作用与FastWriter相反,是将JSON格式的数据解析成一个Value
  22. 常用函数: reader.parse(<#std::istream &is#>, <#Json::Value &root#>)
  23. */
  24. Json::Reader reader;

通过上面的注释,我们可以很清楚的了解函数的意义。下面我们开始生成Json数据和解析Json数据。


Json数据生成

  1. //先定义数据
  2. Value map;
  3. map["name"] = "9miao";
  4. map["password"] = "123456";
  5. map["Email"] = "9miao@longtugame.com";
  6. map["PHONE"] = 10086;
  7. //编码成json数据
  8. FastWriter write;
  9. string jsonData = write.write(map);
  10. //打印结果
  11. CCLog("jsonData:%s", jsonData.c_str());

上面的打印结果:

  1. jsonData:{"Email":"9miao@longtugame.com","PHONE":10086,"name":"9miao","password":"123456"}

Json数据解析

有时候我们需要解析Resources目录下的json文件,首先我们就需要将json文件拷贝到Resources目录下。我们将下面的Json格式文件拷贝到Resources目录下命名为info.json.

  1. { "info": [ {"name":"aaa","num":"0001"}, {"name":"bbb","num":"0002"}, {"name":"ccc","num":"0003"}, {"name":"ddd","num":"0004"}, {"name":"eee","num":"0005"}, {"name":"fff","num":"0006"}, {"name":"ggg","num":"0007"}, {"name":"hhh","num":"0008"}, {"name":"iii","num":"0009"}, {"name":"jjj","num":"0010"}, {"name":"kkk","num":"0011"}, {"name":"lll","num":"0012"}, {"name":"mmm","num":"0013"}, {"name":"nnn","num":"0014"}, {"name":"ooo","num":"0015"}, {"name":"ppp","num":"0016"} ], "gender": "male", "occupation": "coder"}

我们在程序中添加以下代码对其解析:

  1. Reader reader;
  2. //定义Valuer
  3. Value value;
  4. //json文件路径
  5. string jsonFile = CCFileUtils::sharedFileUtils()->fullPathForFilename("info.json");
  6. //将文件生成CCString对象
  7. CCString* json = CCString::createWithContentsOfFile(jsonFile.c_str());
  8. //将数据解析到value中
  9. if (reader.parse(json->getCString(),value))
  10. {
  11. int length = value["info"].size();
  12. //循环解析子节点
  13. for (int index = 0; index < length; index++)
  14. {
  15. std::string name = value["info"][index]["name"].asString();
  16. std::string num = value["info"][index]["num"].asString();
  17. CCLog("name:%s", name.c_str());
  18. CCLog("num:%s", num.c_str());
  19. }
  20. //获取方式一
  21. Value valueGender;
  22. valueGender = value.get("gender", valueGender);
  23. std::string gender = valueGender.asCString();
  24. //获取方式二
  25. std::string occupation = value["occupation"].asCString();
  26. CCLog("gender:%s", gender.c_str());
  27. CCLog("occupation:%s", occupation.c_str());
  28. }

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号