专栏首页Unity TechnologyJtro的技术分享:Unity解析json文件(分为json与jsonArray)

Jtro的技术分享: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$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; }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jtro的技术分享:获取传感器消息通过mqtt通讯传给网页前端

    标题虽然这么长,但是做法却十分简单 总共分为两个步骤 第一:获取传感器消息 第二:传给mqtt网络 第三:网页根据mqtt消息采取动作 总结:就是硬件...

    LittleU
  • Jtro的技术分享:MVC框架

    MVC框架历史悠久了,具体多久我也不知道,但是在游戏开发中的UI 使用太普遍了,最近我的一个徒弟跟我抱怨说网上的mvc框架晦涩难懂,看了一下午看不出所以然来,我...

    LittleU
  • Jtro的技术分享:游戏模式之命令模式

    命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以...

    LittleU
  • C#特性的学习(一)

    第一个属性:ValidOn 规定特性可被放置的语言元素,默认是AttributeTargets.All。

    _一级菜鸟
  • C# 基础知识系列- 14 IO篇 文件的操作(2)

    除了上文提到的 GetDirectories 方法可以直接返回目录下所有子目录以外,还有一组方法也可以枚举出当前目录下的子目录:

    程序员小高
  • .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为...

    蒋金楠
  • Servlet API 源码剖析

    从目录出发,整个源代码分为 servlet、http、descriptor、annotation 四个部分。

    FoamValue
  • 从0.5到1写个rpc框架 - 2:远程服务调用(grpc)

    gRPC是Google开源的跨语言远程服务调用(RPC)框架,通信协议用的HTTP/2,数据传输默认用的protocol buffers(一种轻便高效的结构化数...

    acupt
  • 设计模式----状态模式

    SuperHeroes
  • Beautiful Soup

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    村雨遥

扫码关注云+社区

领取腾讯云代金券