Unity解析json文件(分为json与jsonArray)

什么是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$u---------------4mfiA0XAIG",
        "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; }
}

猜你喜欢

转载自blog.csdn.net/weixin_41590778/article/details/129475984