-

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


首先引入头文件

#include "CrossAppExt.h"
using namespace CSJson;


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

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

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


Json数据生成

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

上面的打印结果:

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

Json数据解析

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

{    "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"}


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

Reader reader;
    //定义Valuer
    Value value;
     
    //json文件路径
    string jsonFile = CCFileUtils::sharedFileUtils()->fullPathForFilename("info.json");
     
    //将文件生成CCString对象
    CCString* json = CCString::createWithContentsOfFile(jsonFile.c_str());
     
    //将数据解析到value中
    if (reader.parse(json->getCString(),value))
    {
        int length = value["info"].size();
         
        //循环解析子节点
        for (int index = 0; index < length; index++)
        {
            std::string name = value["info"][index]["name"].asString();
            std::string num = value["info"][index]["num"].asString();
             
            CCLog("name:%s", name.c_str());
            CCLog("num:%s", num.c_str());
        }
         
        //获取方式一
        Value valueGender;
        valueGender = value.get("gender", valueGender);
        std::string gender = valueGender.asCString();
         
        //获取方式二
        std::string occupation = value["occupation"].asCString();
        CCLog("gender:%s", gender.c_str());
        CCLog("occupation:%s", occupation.c_str());
    }