json解析

2018-09-08 17:09 更新

CrossApp使用lib_json來解析json文件。lib_json已經(jīng)加入了libExtensions下,我們?cè)贑rossApp中使用非常的便捷。


首先引入頭文件

#include "CrossAppExt.h"
using namespace CSJson;


我們先熟悉一下幾個(gè)類名和函數(shù)

   /*
    Value:寫過腳本、弱語言的童鞋應(yīng)該很清楚var,其他Value 和var一個(gè)道理,都是可以表示很多數(shù)據(jù)類型的數(shù)據(jù)類型。 
    這話可能比較繞,簡(jiǎn)單說就是Value你可以理解可以是int 也可以是string 也可以是其他數(shù)據(jù)類型。
    當(dāng)然定義 Value value,只是個(gè)定義,還沒有決定其數(shù)據(jù)類型,如果你Value value =10;那么value 就是個(gè)整型
    在用于JSON時(shí),我們常表示為一個(gè)map,其中包括 key-value,鍵值對(duì)
    其中Value 中包括一些將其轉(zhuǎn)為基礎(chǔ)數(shù)據(jù)類型的6個(gè)方法,如下:
        value.asCString();
        value.asString();
        value.asBool();
        value.asDouble();
        value.asInt();
        value.asUInt();
    */
         
    Value map;
     
    /*
    FastWriter:起作用是將Value數(shù)據(jù)編碼成JSON格式的數(shù)據(jù)
    常用函數(shù):write(<#const Json::Value &root#>)
    */
    Json::FastWriter write;
         
    /*
    Value:作用與FastWriter相反,是將JSON格式的數(shù)據(jù)解析成一個(gè)Value
    常用函數(shù): reader.parse(<#std::istream &is#>, <#Json::Value &root#>)
    */
    Json::Reader reader;

通過上面的注釋,我們可以很清楚的了解函數(shù)的意義。下面我們開始生成Json數(shù)據(jù)和解析Json數(shù)據(jù)。


Json數(shù)據(jù)生成

//先定義數(shù)據(jù)
    Value map;
    map["name"] = "9miao";
    map["password"] = "123456";
    map["Email"] = "9miao@longtugame.com";
    map["PHONE"] = 10086;
     
    //編碼成json數(shù)據(jù)
    FastWriter  write;
    string jsonData = write.write(map);
     
    //打印結(jié)果
    CCLog("jsonData:%s", jsonData.c_str());

上面的打印結(jié)果:

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

Json數(shù)據(jù)解析

有時(shí)候我們需要解析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"}


我們?cè)诔绦蛑刑砑右韵麓a對(duì)其解析:

Reader reader;
    //定義Valuer
    Value value;
     
    //json文件路徑
    string jsonFile = CCFileUtils::sharedFileUtils()->fullPathForFilename("info.json");
     
    //將文件生成CCString對(duì)象
    CCString* json = CCString::createWithContentsOfFile(jsonFile.c_str());
     
    //將數(shù)據(jù)解析到value中
    if (reader.parse(json->getCString(),value))
    {
        int length = value["info"].size();
         
        //循環(huán)解析子節(jié)點(diǎn)
        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());
    }


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)