一、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内容相关推荐

  1. android 读json文件,在Android中读取json文件

    小编典典 将该文件放入资产中 . 对于在Android Studio项目中创建的项目,您需要在主文件夹下创建资产文件夹. 将该文件读取为: public String loadJSONFromAsse ...

  2. js 中读取JSON的方

    js 中读取JSON的方法探讨 2009-03-01 16:08 js读取JSON的方法我接触到的有两种: 方法一:函数构造定义法返回 var strJSON = "{name:'json ...

  3. netcore读取json文件_.net core读取json格式的配置文件

    在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用j ...

  4. C#中读取文件内容本文分步介绍了如何从文本文件

    ------- <a href="http://***" target="blank">Windows Phone 7手机开发</a>. ...

  5. php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)...

    php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...

  6. Unity中采用JSON进行存档和读档

    在利用JSON做存档和读档之前,首先要在Assets导入一个脚本!这个脚本就是LitJson.dll 然后在Unity中首先创建一个Save脚本,用于保存游戏中相关的信息,在这里我存储的是游戏中怪物的 ...

  7. netcore读取json文件_【NET Core】.NET Core中读取json配置文件

    在.NET Framework框架下应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别用 Sy ...

  8. js中读取json对象

        json的用途我也不在这里介绍了,简单说一些JSON的结构: JSON有两种结构 json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以 ...

  9. ajax怎样获取json数据,如何使用ajax读取Json中的数据

    本文给大家分享一下,如何使用ajax读取Json中的数据. 一.基础知识 什么是json? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) ...

最新文章

  1. STM8L之外部中断
  2. matlab 字符串替换
  3. 图像处理-空间域平滑滤波
  4. Android学习之动态调用碎片
  5. git 查看自己的用户名和邮箱
  6. -32767转化为二进制_谁说前端不需要懂二进制
  7. SDL2源代码分析5:更新纹理(SDL_UpdateTexture())
  8. leetcode[35]搜索插入位置/Search Insert Position 暴力和二分法详解
  9. 计算机体系结构及组成原理
  10. pe服务器注册表,注册表修复方法
  11. Python多项逻辑回归用LogisticRegression识别英文字母数据集letter-recognition.data
  12. molar mass
  13. TSE无线通信(铺垫)
  14. 烙铁-电子工程师的画笔
  15. 俞敏洪:我和马云就差了8个字
  16. 三次bezier曲线 MATLAB,Matlab-画二次及三次Bezier曲线-8控制点的B样条曲线
  17. 施耐德m340设置ip后忘记ip,怎么恢复ip
  18. c++商店信息管理系统的设计与实现
  19. 联想(IBM)thinkpad-SL400笔记本安装xp系统完全过程
  20. 荣誉系统排名是整个服务器,魔兽世界怀旧服大元帅/高阶督军必备PVP荣誉系统简介...

热门文章

  1. Java抽象类和接口的区别
  2. 一起艳学3步把tomcat配置https(小程序)
  3. New Concept English3 Lesson 3. An unknown Goddess【精讲学习笔记】
  4. Linux 知识点归纳(一) 进程概念 以及 查看进程的方法
  5. 高级语言程序设计 13-14-1
  6. 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。
  7. 微信小程序CSS样式图片闪烁
  8. android横竖屏幕的切换
  9. 全网最牛的12306抢票神器,助力抢到春节回家的票
  10. 快速开发平台 WebBuilder 的 JNDI 配置