Json作用及Unity中读取json内容
一、Json简介:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于传送数据。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
一般用于数据交互,服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)
二、Json在线解析工具
json在线解析工具
1.复制下方json,到解析工具中
{"name": "动物类","age": 5,"price": 10.1,"isBool": false
}
2.错误检测
复制下方的错误json字段进行检测。
{"name": "动物类","age": 5,"price": 10.1,"isBool": false
三、json书写格式
1. 默认空json
2.Json常用字段属性有三种 数字、字符串、布尔值
3. 数组
4.数组+字段
四、实际引用
我们写一个动物类json,该类包含 类名、类描述、哺乳类动物集合、鸟类集合json如下:
{"name": "动物类","dsc": "存放所有动物数据","isBool": false,"mammalArray": [{"name": "狗","food": "骨头","age": 5,"price": 1200.5}],"birdsList": [{"name": "鸽子","food": "谷物","age": 1,"price": 100.2}]
}
1.脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
//using LitJson;
using System.IO;
using System;
using UnityEngine.Networking;#region 数据类[Serializable]//注意:没有序列化,转换会失败
public class Animal
{public string name;public string dsc;public bool isBool;public Mammal[] mammalArray; //数组public List<Birds> birdsList; //列表
}[Serializable]//注意:没有序列化,转换会失败
public class Mammal
{public string name;public string food;public int age;public double price;
}[Serializable]//注意:没有序列化,转换会失败
public class Birds
{public string name;public string food;public int age; public double price;//所有带小数的字段类型 必须是double,否则无法转换
}
#endregion//json控制器
public class JsonController : MonoBehaviour
{readonly string jsonTxt = "test.txt";string jsonFilePath;string jsonStr; //json的string内容Dictionary<string, object> jsonDict;[Header("写入/读取/转换按钮")][SerializeField] Button writeBtn;[SerializeField] Button readBtn;[SerializeField] Button conversionBtn;void Start(){//1.测试数据Animal testData = new Animal(){name = "动物类",dsc = "存放所有动物数据",mammalArray = new Mammal[]{new Mammal{name="狗" ,food="骨头",age=5,price=1200.50},},birdsList = new List<Birds>{new Birds{name="鸽子" ,food="谷物",age=1,price=100.20}}};2.向字典添加测试数据//jsonDict = new Dictionary<string, object>();//jsonDict.Add("TestData", testData);3.转换获取数据//JsonData data = jsonDict["TestData"] as JsonData;//Debug.Log(data.name);CreatJsonDataPath(jsonTxt);//4.创建JsonData保存路径//5.监听writeBtn.onClick.AddListener(() => WriteJsonData(testData)) ;readBtn.onClick.AddListener(()=> GetJsonData());conversionBtn.onClick.AddListener(delegate {Animal data = new Animal();JsonDataConversion(GetJsonData(), data);Debug.Log(data.dsc);});}void Update(){}#region 设置json路径void CreatJsonDataPath(string fileName){if (Application.platform == RuntimePlatform.Android)jsonFilePath = "jar:file://" + Application.dataPath + "!/assets/" + fileName; //这个路径等同于 Application.persistentDataPathelsejsonFilePath = Application.streamingAssetsPath + "/" + fileName;//if (!File.Exists(Application.persistentDataPath + "/" + fileName))//{// FileStream fs = File.Create(Application.persistentDataPath + "/" + fileName);// fs.Close();// File.WriteAllBytes(Application.persistentDataPath + "/" + fileName, request.downloadHandler.data);//}//路径为空创建文件if (!File.Exists(jsonFilePath)){Debug.Log($"为空创建文件{fileName}");FileStream fs = File.Create(jsonFilePath);fs.Close();}}#endregion#region 写入数据//写入数据void WriteJsonData(object contentTxt){//1.将string内容转换为json类型string json = JsonUtility.ToJson(contentTxt, true);Debug.Log("写入的json数据:\n" + json);//2.写入jsonFile.WriteAllText(jsonFilePath, json);Debug.Log("保存成功");}#endregion#region 读取数据private string GetJsonData(){string data = File.ReadAllText(jsonFilePath);Debug.Log("获取Json数据文件:\n " + data);return data;#region WWW读取方式//WWW www = new WWW(jsonFilePath);//if (www.error != null)//{// Debug.LogError("error while reading files : " + jsonFilePath);// return ""; //读取文件出错//}//while (!www.isDone) { }Debug.Log("File content : " + www.text);//www下面还有获取字节数组的属性//return www.text;#endregion}#region UnityWebRequest方法IEnumerator GetJsonData2(){//1.创建一个UnityWebRequest类 method属性为GetUnityWebRequest request = UnityWebRequest.Get(jsonFilePath);//2.等待响应时间,超过5秒结束request.timeout = 5;//3.发送请求信息yield return request.SendWebRequest();//4.判断是否下载完成if (request.isDone){//5.判断是否下载错误if (request.isHttpError || request.isNetworkError)Debug.Log(request.error);else{jsonStr = request.downloadHandler.text;Debug.Log("获取的json数据:\n" + jsonStr);}}}#endregion#endregion#region json数据转换void JsonDataConversion(string data, object obj) {JsonUtility.FromJsonOverwrite(data, obj);}#endregion}
运行结果
五、注意事项
1.类的字段名、集合字段名要与json字段名称相同,否则json读取时找不到字段不会赋值
2.类字段数据类型要与json字段数据类型相同,否则会转换失败
3.集合字段类要序列化,否则转换成json时失败,没有数据
4.所有float小数必须是Double类型字段才可以被转换
Json作用及Unity中读取json内容相关推荐
- android 读json文件,在Android中读取json文件
小编典典 将该文件放入资产中 . 对于在Android Studio项目中创建的项目,您需要在主文件夹下创建资产文件夹. 将该文件读取为: public String loadJSONFromAsse ...
- js 中读取JSON的方
js 中读取JSON的方法探讨 2009-03-01 16:08 js读取JSON的方法我接触到的有两种: 方法一:函数构造定义法返回 var strJSON = "{name:'json ...
- netcore读取json文件_.net core读取json格式的配置文件
在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用j ...
- C#中读取文件内容本文分步介绍了如何从文本文件
------- <a href="http://***" target="blank">Windows Phone 7手机开发</a>. ...
- php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)...
php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...
- Unity中采用JSON进行存档和读档
在利用JSON做存档和读档之前,首先要在Assets导入一个脚本!这个脚本就是LitJson.dll 然后在Unity中首先创建一个Save脚本,用于保存游戏中相关的信息,在这里我存储的是游戏中怪物的 ...
- netcore读取json文件_【NET Core】.NET Core中读取json配置文件
在.NET Framework框架下应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别用 Sy ...
- js中读取json对象
json的用途我也不在这里介绍了,简单说一些JSON的结构: JSON有两种结构 json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以 ...
- ajax怎样获取json数据,如何使用ajax读取Json中的数据
本文给大家分享一下,如何使用ajax读取Json中的数据. 一.基础知识 什么是json? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) ...
最新文章
- STM8L之外部中断
- matlab 字符串替换
- 图像处理-空间域平滑滤波
- Android学习之动态调用碎片
- git 查看自己的用户名和邮箱
- -32767转化为二进制_谁说前端不需要懂二进制
- SDL2源代码分析5:更新纹理(SDL_UpdateTexture())
- leetcode[35]搜索插入位置/Search Insert Position 暴力和二分法详解
- 计算机体系结构及组成原理
- pe服务器注册表,注册表修复方法
- Python多项逻辑回归用LogisticRegression识别英文字母数据集letter-recognition.data
- molar mass
- TSE无线通信(铺垫)
- 烙铁-电子工程师的画笔
- 俞敏洪:我和马云就差了8个字
- 三次bezier曲线 MATLAB,Matlab-画二次及三次Bezier曲线-8控制点的B样条曲线
- 施耐德m340设置ip后忘记ip,怎么恢复ip
- c++商店信息管理系统的设计与实现
- 联想(IBM)thinkpad-SL400笔记本安装xp系统完全过程
- 荣誉系统排名是整个服务器,魔兽世界怀旧服大元帅/高阶督军必备PVP荣誉系统简介...