zoukankan      html  css  js  c++  java
  • Json数据解析在Unity3d中的应用

    最近做项目过程中因为Json文件名写错了一个字母Unity报错,找错误找到半夜,当时为了验错,写了一个小Demo,正好借此总结一下Json.

    1.什么是Json

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

    2.JSON 语法规则

    • 数据在键值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

    3.Json的结构

    • 对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
    • 数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

    4.Json在Unity3d中的使用

    • JsonUtility:JsonUtility是Untiy5.3后新增的内容,有时会出现莫名其妙的错误:
      JsonUtility.FromJson():把json字符串转成对象.
      JsonUtility.ToJson():把对象转成json字符串.

    • LitJson:LitJson是一个Json的开源项目,这个比较稳定,推荐使用:
      JsonMapper.ToObject():把json字符串转成对象.
      JsonMapper.ToJson():把对象转成json字符串.
      官网下载:http://www.json.org/json-zh.html
      1.png
      放到Unity3d中的Plugin文件夹内
      2.png
      使用的话要注意引入命名空间

    3.png

    5.上代码:

    纯数组的Json数据比较简单,在这个Demo中Json数据是一个对象,对象内有一个数组.分别需要用到一个Json对象模型(JsonObjectModel)和一个Json数组模型(JsonArrayModel)来接收这两种Json数据:

    • Json源文件
    {
      "infoList": [
        {
          "panelTypeString": "ItemMessage",
          "path": "UIPanel/ItemMessagePanel"
        },
        {
          "panelTypeString": "Knapsack",
          "path": "UIPanel/KnapsackPanel"
        },
        {
          "panelTypeString": "MainMenu",
          "path": "UIPanel/MainMenuPanel"
        },
        {
          "panelTypeString": "Shop",
          "path": "UIPanel/ShopPanel"
        },
        {
          "panelTypeString": "Skill",
          "path": "UIPanel/SkillPanel"
        },
        {
          "panelTypeString": "System",
          "path": "UIPanel/SystemPanel"
        },
        {
          "panelTypeString": "Task",
          "path": "UIPanel/TaskPanel"
        }
      ]
    }
    
    • JsonObjectModel:Json对象模型
    public class JsonObjectModel 
    {
        //JsonArrayModel类型的列表
        public List<JsonArrayModel> infoList;
        
    }
    
    • JsonArrayModel:Json数组模型
    public class JsonArrayModel
    {
        //对应Json中属性 名字要一样
        public string panelTypeString;
        public string path;
    }
    
    • JsonDeserialize:Json解析程序,挂在场景中JsonManager上
    public class JsonDeserialize : MonoBehaviour
    {  
        void Start( )
        {
             //获取Json文件
            TextAsset jsonData = Resources.Load<TextAsset>("JsonData");
    
            JsonObjectModel jsonObject = JsonMapper.ToObject<JsonObjectModel>(jsonData.text);
    
            foreach (var info in  jsonObject.infoList)
            {
                Debug.Log(info.panelTypeString+" "+info.path);
            }
    
        }
    }
    
    • 输出结果:
      5.png

    6.Demo源代码

    链接:http://pan.baidu.com/s/1jHVP9m2 密码:e9h8

  • 相关阅读:
    C# 调用c++ 生成的dll
    【转】Unity3D的主要类图
    【转】Unity3D开发七惑
    Unity3D 3.5 之windows平台coding及debug环境小结
    __FILE__ __LINE__ C++ 宏定义 调试
    代码换行格式(inconsistent line endings) Windows(CR LF) 修改
    【转】 QGLWidget类
    帧缓冲区对象
    【转】kd树
    【转】unity Mathf 数学运算(C#)
  • 原文地址:https://www.cnblogs.com/qiaogaojian/p/6532665.html
Copyright © 2011-2022 走看看