什么是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; } }
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句