美文网首页unity3D技术分享
Jtro的技术分享:Unity解析json文件(分为json与j

Jtro的技术分享:Unity解析json文件(分为json与j

作者: UnityPlane | 来源:发表于2019-09-26 10:23 被阅读0次

    什么是json?

    JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度,

    那么,JSON到底是什么?

    JSON就是一串字符串 只不过元素会使用特定的符号标注。

    {} 双括号表示对象

    [] 中括号表示数组

    "" 双引号内是属性或值

    : 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

    所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象

    而[{"name": "Michael"},{"name": "Jerry"}]就表示包含两个对象的数组

    当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面一部,这是一个拥有一个name数组的对象

    ps:现在还有很多人存在一些误区,为什么{name:'json'}在检验时通过不了,
    那是因为JSON官网最新规范规定

    如果是字符串,那不管是键或值最好都用双引号引起来,所以上面的代码就是{"name":"json"}

    不要反驳,官网就是这么定义的。

    解析如下的json文件:

    {
        "code": 0,
        "data": {
            "delFlag": 0,
            "id": 3,
            "major": 1000,
            "password": "$2a$10$uZ25MrSQafnEF34mfiA0XAIG",
            "realName": "张永",
            "roleId": 2,
            "roleName": "学生",
            "schoolId": 1000,
            "schoolName": "尚哲智能",
            "studentId": 1000,
            "token": "eo",
            "username": "1"
        },
        "msg": "成功"
    }
    

    现在是解析“data”中的数据,首先在脚本中定义一个类,这个类包括所有的json的node,格式如下显示:

    //注意:定义的字符串名字要和json文件中的node名字一样
     [Serializable]
        public class TokenEle
        {
            public string delFlag;
            public string id;
            public string major;
            public string password;
            public string realName;
            public string roleId;
            public string roleName;
            public string schoolId;
            public string schoolName;
            public string studentId;
            public string token;
            public string username;
        }
    

    然后 定义一个用于解析的类“

     [Serializable]
        public class TokenAll
        {
            public TokenEle data;
        }
    

    下面是解析的过程:

    TokenAll tokenAll = JsonUtility.FromJson<TokenAll>(logJson);
      //得到你需要的值
    tokenAll.data.token;
    //你也可以用foreach来遍历
    

    这样,你就会得到你需要的json文件中的值
    解析jsonarray文件:
    需要解析的json文件如下:我们解析data的文件

    {
        "code": 0,
        "data": [
            {
                "accountTotalNumber": 10000,
                "accountUseNumber": 6,
                "address": "江苏省南京市建邺区信安大厦",
                "contact": "xxxxxxxxxxx",
                "expireDate": "2043-08-19 00:00:00",
                "id": 1000,
                "leader": "吴小冬",
                "name": "尚哲智能",
                "orgId": 1000
            }
        ],
        "msg": "成功"
    }
    

    这样带有[ ] 的json文件是组的形势存在的,也就是说,相类似的数据会有若干组,
    和上面一样定义一个包含它们所有node的类:

     [Serializable]
        public class logJsonEle
        {
            public string accountTotalNumber;
            public string accountUseNumber;
            public string address;
            public string contact;
            public string expireDate;
            public string id;
            public string leader;
            public string name;
            public string orgId;
        }
    

    然后定义一个解析的类:

    [Serializable]
        public class logJsonAll
        {
            public logJsonEle[] data;
        }
    

    然后解析的过程是一样的

     foreach (var item in jsonAll.data)
            {
                DropdowmoptionsList.Add(item.name);
                StationDic.Add(item.name, item.id);
            }
    

    那么要如何生成json文件呢
    其实很简单

     JsonData jsonData = new JsonData();
    
                jsonData["username"] = UserName.text;
                jsonData["password"] = Password.text;
                jsonData["schoolId"] = StationDic[dropdown_Station.options[dropdown_Station.value].text];
    
     string jsl = jsonData.ToJson();
    

    这个jsl就是生成的json格式的字符串

    还有一种,是有层级的关系,如下:

             data["name"] = "Czhenya";
             //生成嵌套结构的json
            data["info"] = new JsonData();
            data["info"]["age"] = 28;
            data["info"]["sex"] = "男";
    

    还有一种生成json文件的方法.这个比价灵活

    using Newtonsoft.Json;
    using System.Collections.Generic;
    using UnityEngine;
    /// <summary>
    /// 生成json文件
    /// </summary>
    public class CreatJson : MonoBehaviour
    { 
        private Md5Info md = new Md5Info();
        private void Start()
        {
              Md5InfoList md5list = new Md5InfoList
                {
                    listname = name,
                    listmd5 = md5Infos,
                    listpath = path
                };
                md.Md5data.Add(md5list);
                ToJson();
        }   
        //数据转换为json
        void ToJson()
        {
            md.jsonName = "JsonName";
            string jsonstring = JsonConvert.SerializeObject(md); 
        }
    }
    public class Md5Info
    {
        public string jsonName;
        public List<Md5InfoList> Md5data = new List<Md5InfoList>();
    }
    public class Md5InfoList
    {
        public string listname { set; get; }
        public string listmd5 { set; get; }
        public string listpath { set; get; }
    }
    
    

    相关文章

      网友评论

        本文标题:Jtro的技术分享:Unity解析json文件(分为json与j

        本文链接:https://www.haomeiwen.com/subject/mfyjjctx.html