JSON概念笔记(Unity相关)

JSON数据格式

JSON相当于是语言的数据媒介,简称JavaScript Objiect Notation。JavaScript是一种跨平台、跨语言、轻量级的数据交换和存储格式。
服务器:存储和处理数据的一台或一组电脑
在网页上按下F12可以出现调试工具
在这里插入图片描述
服务器语言:Java、C++、JS、PHP、Python、Go
unity开发语言:C#、Lua
JSON校验格式工具:https://www.bejson.com/
声明对象:{}就已经是声明了
在这里插入图片描述
JSON可以直接写在JavaScript文件中,是Javascript中的一部分,纯文本也可以。

支持的数据类型

数据类型包含
数字型short、int、float、long、double
字符串“abc”、‘abc’
布尔值true、false
数组(列表)[值1,值2]
对象(字典){“键1”:“值1”,“键2”:“值2”}

数组和对象中可以是不同的类型,对象和数组也可以互套,JSON中的对象与C#中的对象还是有区别,可以不用一一对应相同的类型。
在数组中嵌套对象
对象

每次的使用需要清除之前的,不然会报错。对应C#中字典的写法:new Dictionary<string,int>{{"a":1},{"b":2}}

字符含义
[ ]数组、列表
{}对象、字典
:赋值,左边是键名称或变量,右边是值
,元素分隔符,最后一个没有
" " 和 ’ ’修饰变量,表示string数据类型

在游戏中使用JSON

存储在服务器中的数据
存储策划配置中的Excel(Excel->JSON)

Excel->JSON步骤

1、记录Excel数据
2、将Excel导出为CSV在这里插入图片描述

在这里插入图片描述
在bejson网站中有Excel->JSON
在这里插入图片描述
在这里插入图片描述

C#使用JSON数据

数据存储(序列化):C#数据格式->JSON字符串,存储或传输;
数据使用(反序列化):JSON字符串中存储的数据->C#可使用的数据格式;

序列化:(程序数据->JSON字符串)
反序列化:(JSON字符串->程序数据)

Unity中的JSON工具

在类的前面加上[System.Serializable],表示该数据可以被序列化后存储,不加在UnityJson工具中会有问题,在其它类中作为成员变量无法使用
将C#对象数据转换为JSON字符串(序列化)JsonUtility.ToJson(data);

[System.Serializable]
public class SubData//该对象为空
{
}

[System.Serializable]//类产生的对象数据,可以被序列化后存储

internal class Data
{
    public int ID;
    public string Name;
    public bool IsStudent;
    public SubData Sub;//对象型
    public List<int> Numbers;//列表
}

//使用unity的内置JSON解析工具,将C#数据序列化为JSON字符数据
public class JSONEncode : MonoBehaviour
{
    public void Start()
    {
        Data data = new Data();
        data.ID = 2;
        data.Name = "呵呵";
        data.IsStudent = false;
        data.Sub = null;
        data.Numbers = new List<int> { 1, 2, 3 };

        //将c#对象数据,转换为JSON字符串
        string j = JsonUtility.ToJson(data);
        
        Debug.Log(j);
    }
}

打印结果
在这里插入图片描述
存游戏物体是就是存字符串路径,加载路径
反序列化JsonUtility.FromJson<Data>(json);
创建一个json文件,把上面序列化的内容复制到文件中,选择utf-8编码。
在这里插入图片描述

public class JsonDeCode : MonoBehaviour
{
    void Start()
    {
        //以".json"扩展名文件可以作为TextAssert数据加载
        TextAsset asset = Resources.Load<TextAsset>("JSON/test");
        //获取TextAssert中的内容
        string json = asset.text;

        Debug.Log(json);
        //反序列化
        Data d = JsonUtility.FromJson<Data>(json);

        Debug.Log(d.Name);
        Debug.Log(d.ID);
        Debug.Log(d.IsStudent);
        Debug.Log(d.Numbers);
        Debug.Log(d.GO);
    }
}

如果打印出来的与json文件中的一致,反序列化成功。
在这里插入图片描述
目录结构如下:在这里插入图片描述
如果使用的unity的内置解析类,最外层结构必须是对象,不能数组,如果最外层是数组,那么可以在最外层套一个对象
在这里插入图片描述
创建一个C#文件解析道具

[System.Serializable]
public class ItemTable
{
    public List<Item> Data;
}
[System.Serializable]
public class Item
{
    public int ID;
    public string Name;
    public string Description;
    public int Level;
    public int PriceType;
}
public class JsonItem : MonoBehaviour
{
    private void Start()
    {
          TextAsset a = Resources.Load<TextAsset>("JSON/Item");
          string json = a.text;
          ItemTable js = JsonUtility.FromJson<ItemTable>(json);
          Debug.Log(js.Data[0].Name);
    }
}

会打印出json文件中第一个道具的名称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值