一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

[腳本]Unity3d之json解析研究

 許多潤澤 2013-01-17

[腳本]Unity3d之json解析研究


  json是好東西啊!JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式
      JSON簡單易用,我要好好研究一下,和大家共享一下.
      想了解更詳細(xì)的數(shù)據(jù)可以參考一下百科:http://baike.baidu.com/view/136475.htm
      好了,我們步入正題:unity3d使用json
      我寫了4個(gè)方法:ReadJson(),ReadJsonFromTXT();WriteJsonAndPrint(),WriteJsonToFile(string,string).
     想使用JSon需要dll動(dòng)態(tài)鏈接庫
還有一些相應(yīng)的命名空間using UnityEngine;
using System.Collections;
using LitJson;
using System.IO;
#if UNITY_EDITOR
using UnityEditor;
#endif
首先你需要2個(gè)字符串,一個(gè)為路徑,一個(gè)文txt文件。
我的寫法如下:
    public TextAsset txt;
    public string filePath;
    public string fileName;
// Use this for initialization
void Start () {
        filePath = Application.dataPath + "/TextFile";
        fileName = filePath + "/File.txt"; 
}

     1. //讀json數(shù)據(jù)
    void ReadJson()
    {
        //注意json格式。我的只能在一行寫入啊,要不就報(bào)錯(cuò),懂的大牛,不吝賜教啊,這是為什么呢?
        string str = "{'name':'taotao','id':10,'items':[{'itemid':1001,'itemname':'dtao'},{'itemid':1002,'itemname':'test_2'}]}";
        //這里是json解析了
        JsonData jd = JsonMapper.ToObject(str);
        Debug.Log("name=" + jd["name"]);
        Debug.Log("id=" + jd["id"]);
        JsonData jdItems = jd["items"];
        //注意這里不能用枚舉foreach,否則會(huì)報(bào)錯(cuò)的,看到網(wǎng)上
        //有的朋友用枚舉,但是我測試過,會(huì)報(bào)錯(cuò),我也不太清楚。
        //大家注意一下就好了
        for (int i = 0; i < jdItems.Count; i++)
        {
            Debug.Log("itemid=" + jdItems["itemid"]);
            Debug.Log("itemname=" + jdItems["itemname"]);
        }
        Debug.Log("items is or not array,it's " + jdItems.IsArray);
    }
2.  //從TXT文本里都json
    void ReadJsonFromTXT()
    {
        //解析json
        JsonData jd = JsonMapper.ToObject(txt.text);
        Debug.Log("hp:" + jd["hp"]);
        Debug.Log("mp:" + jd["mp"]);
        JsonData weapon = jd["weapon"];
        //打印一下數(shù)組
        for (int i = 0; i < weapon.Count; i++)
        {
            Debug.Log("name="+weapon["name"]);
            Debug.Log("color="+weapon["color"]);
            Debug.Log("durability="+weapon["durability"]);
        }
    }
3.   //寫json數(shù)據(jù)并且打印他
    void WriteJsonAndPrint()
    {
        System.Text.StringBuilder strB = new System.Text.StringBuilder();
        JsonWriter jsWrite = new JsonWriter(strB);
        jsWrite.WriteObjectStart();
        jsWrite.WritePropertyName("Name");
        jsWrite.Write("taotao");
        jsWrite.WritePropertyName("Age");
        jsWrite.Write(25);
        jsWrite.WritePropertyName("MM");
        jsWrite.WriteArrayStart();
        jsWrite.WriteObjectStart();
        jsWrite.WritePropertyName("name");
        jsWrite.Write("xiaomei");
        jsWrite.WritePropertyName("age");
        jsWrite.Write("17");
        jsWrite.WriteObjectEnd();
        jsWrite.WriteObjectStart();
        jsWrite.WritePropertyName("name");
        jsWrite.Write("xiaoli");
        jsWrite.WritePropertyName("age");
        jsWrite.Write("18");
        jsWrite.WriteObjectEnd();
        jsWrite.WriteArrayEnd();
        jsWrite.WriteObjectEnd();
        Debug.Log(strB);
        JsonData jd = JsonMapper.ToObject(strB.ToString());
        Debug.Log("name=" + jd["Name"]);
        Debug.Log("age=" + jd["Age"]);
        JsonData jdItems = jd["MM"];
        for (int i = 0; i < jdItems.Count; i++)
        {
            Debug.Log("MM name=" + jdItems["name"]);
            Debug.Log("MM age=" + jdItems["age"]);
        }

    }
4. //把json數(shù)據(jù)寫到文件里
    void WriteJsonToFile(string path,string fileName)
    {
        System.Text.StringBuilder strB = new System.Text.StringBuilder();
        JsonWriter jsWrite = new JsonWriter(strB);
        jsWrite.WriteObjectStart();
        jsWrite.WritePropertyName("Name");
        jsWrite.Write("taotao");
        jsWrite.WritePropertyName("Age");
        jsWrite.Write(25);
        jsWrite.WritePropertyName("MM");
        jsWrite.WriteArrayStart();
        jsWrite.WriteObjectStart();
        jsWrite.WritePropertyName("name");
        jsWrite.Write("xiaomei");
        jsWrite.WritePropertyName("age");
        jsWrite.Write("17");
        jsWrite.WriteObjectEnd();
        jsWrite.WriteObjectStart();
        jsWrite.WritePropertyName("name");
        jsWrite.Write("xiaoli");
        jsWrite.WritePropertyName("age");
        jsWrite.Write("18");
        jsWrite.WriteObjectEnd();
        jsWrite.WriteArrayEnd();
        jsWrite.WriteObjectEnd();
        Debug.Log(strB);
        //創(chuàng)建文件目錄
        DirectoryInfo dir = new DirectoryInfo(path);
        if (dir.Exists)
        {
            Debug.Log("This file is already exists");
        }
        else
        {
            Directory.CreateDirectory(path);
            Debug.Log("CreateFile");
#if UNITY_EDITOR
            AssetDatabase.Refresh();
#endif
        }
        //把json數(shù)據(jù)寫到txt里
        StreamWriter sw;
        if (File.Exists(fileName))
        {
            //如果文件存在,那么就向文件繼續(xù)附加(為了下次寫內(nèi)容不會(huì)覆蓋上次的內(nèi)容)
            sw = File.AppendText(fileName);
            Debug.Log("appendText");
        }
        else
        {
            //如果文件不存在則創(chuàng)建文件
            sw = File.CreateText(fileName);
            Debug.Log("createText");
        }
        sw.WriteLine(strB);
        sw.Close();
#if UNITY_EDITOR
        AssetDatabase.Refresh();
#endif

    }.
為了大家可以更形象理解一下。我用GUI了
  void OnGUI()
    {
        GUILayout.BeginArea(new Rect(0, 0, Screen.width, Screen.height));
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        GUILayout.BeginVertical();
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("ReadJson"))
        {
            ReadJson();
        }
        if (GUILayout.Button("ReadJsonFromTXT"))
        {
            ReadJsonFromTXT();
        }
        if (GUILayout.Button("WriteJsonAndPrint"))
        {
            WriteJsonAndPrint();
        }
        if (GUILayout.Button("WriteJsonToFile"))
        {
            WriteJsonToFile(filePath,fileName);
        }
        GUILayout.FlexibleSpace();
        GUILayout.EndVertical();
        GUILayout.FlexibleSpace();
        GUILayout.EndHorizontal();
        GUILayout.EndArea();
    }
      首先我的工程如下:


接著我們把TestJson腳本賦給攝像機(jī)


我們點(diǎn)擊run一下


你便會(huì)在游戲面板里看到有4個(gè)按鈕了


我們點(diǎn)擊ReadJson按鈕一下


在相印的控制臺(tái)里打印如紅色框內(nèi)


我們clear一下控制臺(tái),clear玩了如下所示,紅色區(qū)域里什么也沒有了


我們點(diǎn)擊一下ReadJsonFromTXT按鈕,點(diǎn)完后發(fā)現(xiàn)打印的結(jié)果和txt里的內(nèi)容一模一樣,呵呵成功了


我們再clear一下控制臺(tái),之后點(diǎn)擊一下WriteJsonAndPrint按鈕


打印結(jié)果如下:


我們接著clear一下控制臺(tái),點(diǎn)擊一下WriteJsonToFile按鈕


我們發(fā)現(xiàn)在工程面板里多出來了一個(gè)文件夾和文本文件,而且控制臺(tái)打印的結(jié)果和文本里的內(nèi)容一樣喲!o(∩_∩)o


好了,這節(jié)講完了。不知道大家清楚沒,歡迎留言。一起學(xué)習(xí),一起進(jìn)步。



請(qǐng)保證工程里面已經(jīng)加入了LitJson.dll

服務(wù)器上JSON的內(nèi)容
  1. [{"people":[
  2. {"name":"fff","pass":"123456","age":"1", "info":{"sex":"man"}}, 
  3. {"name":"god","pass":"123456","age":"1","info":{"sex":"woman"}}, 
  4. {"name":"kwok","pass":"123456","age":"1","info":{"sex":"man"}},
  5. {"name":"tom","pass":"123456","age":"1","info":{"sex":"woman"}}
  6. ]}
  7. ]
復(fù)制代碼

LoadControl_c代碼:

  1. using UnityEngine;
  2. using System.Collections;
  3. using LitJson;

  4. public class LoadControl_c:MonoBehaviour 
  5. {
  6. private GameObject plane;

  7. public string url = "http://127.0.0.1/test2.txt";

  8. // Use this for initialization
  9. void Start()
  10. {
  11. StartCoroutine(LoadTextFromUrl());

  12. //StartCoroutine(DoSomething());

  13. //Book book = new Book("Android dep");

  14. //InvokeRepeating("LaunchProjectile", 1, 5);
  15. }



  16. IEnumerator DoSomething() 
  17. {
  18. yield return new WaitForSeconds(3);
  19. }

  20. IEnumerator LoadTextFromUrl()
  21. {
  22. if (url.Length > 0)
  23. {
  24. WWW www = new WWW(url);
  25. yield return www;
  26. //string data = www.data.ToString().Substring(1); 
  27. string data = www.text.ToString().Substring(1); 

  28. // 下面是關(guān)鍵
  29. print(data);

  30. LitJson.JsonData jarr = LitJson.JsonMapper.ToObject(www.text);

  31. if(jarr.IsArray)
  32. {

  33. for (int i = 0; i < jarr.Count; i++)
  34. {
  35. Debug.Log(jarr[i]["people"]);

  36. JsonData jd = jarr[i]["people"];

  37. for(int j = 0; j < jd.Count; j++)
  38. {
  39. Debug.Log(jd[j]["name"]);
  40. }
  41. }
  42. }
  43. }
  44. }

  45. }




    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲国产成人精品福利| 亚洲av日韩av高潮无打码| 91精品视频免费播放| 日韩欧美一区二区黄色| 五月激情婷婷丁香六月网| 人妻久久这里只有精品| 中国黄色色片色哟哟哟哟哟哟| 日韩午夜老司机免费视频| 久热99中文字幕视频在线| 伊人色综合久久伊人婷婷| 99久热只有精品视频免费看| 国产av大片一区二区三区| 日本加勒比系列在线播放| 亚洲精品福利入口在线| 69久久精品亚洲一区二区| 日韩成人中文字幕在线一区 | 亚洲精品中文字幕熟女| 福利视频一区二区三区| 亚洲一区二区三区中文久久| 九九热九九热九九热九九热| 色婷婷在线精品国自产拍| 在线免费不卡亚洲国产| 一区中文字幕人妻少妇| 后入美臀少妇一区二区| 午夜精品麻豆视频91| 日韩欧美亚洲综合在线| 视频在线播放你懂的一区| 欧美成人黄色一区二区三区| 麻豆国产精品一区二区| 99精品国产一区二区青青| 人妻乱近亲奸中文字幕| 中文字幕亚洲精品人妻| 三级高清有码在线观看| 中文字幕亚洲精品在线播放| 国产免费成人激情视频| 办公室丝袜高跟秘书国产| 在线观看欧美视频一区| 欧美黑人在线精品极品| 五月婷日韩中文字幕四虎| 欧美小黄片在线一级观看| 国产精品欧美激情在线播放|