JSRUN 用代码说话

json解析

编辑教程

json解析

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());
    }
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟