Cocos2d-x教程(15)-Json解析(高級篇)

               歡迎加入 Cocos2d-x 交流羣: 193411763

                   視頻教程地址: http://www.tudou.com/programs/view/nCNuA73mOLM/

                  轉載時請註明原文出處:http://blog.csdn.net/u012945598/article/details/17416531

                 需要源碼請留下郵箱地址

今天我們來學習一下關於比較複雜的Json數據的解析方法。

        在上一節中已經說明,2.2.0以上版本的2d-x已經包含了老版本中我們所使用的jsoncpp的文件,所以我們可以直接使用無需引入任何庫。下面進入正題....

       在製作遊戲的過程中,有很多關於遊戲的信息實際上是保存在文件中的,舉個例子來說,一款遊戲的戰鬥模塊,它的關卡設計需要很多的數據,比如某一關怪物的數量,怪物的刷新時間等等,這些數據都可以保存在文件中,在需要的時候通過某些方法來讀取。.json是我們常用的一種格式,下面我們首先來寫一個json文件

  {
    "Tollgate": [
        {
            "Type1": {
                "RefreshTime": 0.5,
                "Count": 100
            },
            "Type2": {
                "RefreshTime": 5,
                "Count": 2
            }
        },
        {
            "Type1": {
                "RefreshTime": 0.5,
                "Count": 120
            },
            "Type2": {
                "RefreshTime": 5,
                "Count": 2
            }
        }
    ]
}

這是筆者剛剛寫的一個json文件,我們來分析一下它的結構,處於最外層的是 “Tollgate”:[ ] ,Tollgate 代表的是關卡,可以這個鍵所對應的值是一個數組,我們可以看到數組內包含了兩個元素[ { },{ } ], ,事實上這兩個元素單獨拿出來後又是一個Json格式的數據,也是OC中所說的詞典,這兩個元素在數組中被默認爲第0個元素與第1個元素,此處筆者將第0個元素定義爲第1關,將第1個元素定義爲第2關;第一關中又包含了兩個鍵值對,第一個鍵是"Type1",第二個鍵是"Type2",分別代表兩種怪物類型,而每個Type對應的值又是一個詞典{ },詞典內又包含了兩個鍵值對,分別是"RefreshTime"和"Count",代表怪物的刷新時間與怪物的總數。

下面我們來看一下如何在程序中如何獲取到這些數據,新建一個工程,將json文件放到工程目錄下,頭文件及命名空間不要忘記添加。

1.首先要獲取Json文件內的全部數據:

 unsigned long size;

 const char* file = (char*)CCFileUtils::sharedFileUtils()->getFileData("child.json","r", &size);  

通過打印該字符指針 file 我們會在控制檯看到Json文件的全部內容

2.通過Reader的parse方法將Json格式轉換成一個Value

Reader reader;

Value root;

reader.parse(std::string(file),root,false);

3.獲取到Value中的Tollgate所對應的Value,也就是一個數組

Value array;

array=root.get("Tollgate",NULL);

get函數的第二個參數代表找不到Tollgate對應的Value時的默認Value

4.數組中共有兩個元素,我們現在獲取第一個元素中的Type1中,Count所對應的Value

Value count;

count=array[0]["Type1"].get("Count",NULL);

5.此時的count是一個Value類型,我們需要將其轉換爲整型,然後輸出

CCLOG("%d",count.asInt());

輸出後可運行看到結果爲100。

這就是解析Json文件的全過程,我們會覺得有些繁瑣,下面筆者將這個過程做一個簡單的封裝。

新建一個類,筆者命名爲AnalysisJson,.h文件中代碼如下:

.cpp文件代碼如下:


在HelloWorld中引入AnalysisJson頭文件,然後創建一個對象,並調用獲取怪物刷新時間與數量的方法:


運行項目控制檯輸出結果:


這樣便完成了一個Json解析。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章