当前位置: 首页 > news >正文

Unity的JSON工具类+LitJson的引入及使用

C#使用JSON数据

        数据存储(序列化):将C#的数据格式,转化为JSON字符串,存储或传输

        数据使用(反序列化):将JSON字符串中存储的数据,转化为C#可用的数据格式,实现代码逻辑

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

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

Unity的JSON工具

        类名:JsonUtility

        序列化:ToJson()

//测试序列化(C#->JSON数据)
public void Serialize()
{
    //需要有C#数据
    OneRow data=new OneRow();
    data.Num=2;
    data.Name="呵呵";
    data.IsWoman="false";
    
    //将数据传递给JSON工具,会解析为JSON字符串,可用于存储或传输
    //参数1:C#数据
    //参数2:是否将JSON字符串格式化
    string j= JsonUtility.ToJson(data);
    Debug.Log(j);
}

反序列化:FromJson()

数据:string j="{\"Num\":1, \"Name\":\"root\", \"IsWoman\":false}";

C#与JSON对应的数据类型

//告诉Unity的JSON工具,解析JSON后,将数据存储在这个类型的对象中
public class OneRow
{
    public int Num;
    public string Name;
    public bool IsWoman;
}  
//解析JSON为C#对象
//因为JsonUtility.FromJson<T>()需要提供C#数据类型与JSON对应,所以需要在C#中定义数据类型
//将j变量中存储的JSON结构,转化为C#的OneRow类型数据
//T:C#接收类型
//参数:JSON字符串
OneRow data=JsonUtility.FromJson<OneRow>(j);
Debug.Log(data.Name);

注意:如果使用了Unity的内置解析类,JSON最外层结构必须是对象结构

当一个类需要存储在另外一个成员变量中时,需要给类声明加特性

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

LitJson使用

        官网

                https://litjson.net/

https://github.com/LitJSON/litjson (看运气网址)

 导入src文件夹中的Csharp文件到Unity项目的Assets文件中

NuGet Gallery | LitJson.Source 0.19.0

出现以下警告,将下图中的该行注释即可:

序列化

        JsonMapper.ToJson();

反序列化

        获得JsonData(类似C#的object):JsonMapper.ToObject() 

        获得指定类型:JsonMapper.ToObject<T>()

注意

        反序列化不要求最外层是对象

        对象内部存储对象不需要[System.Serializable]修饰Class声明

LitJson(JsonMapper.ToObject<T>())示例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;

public class TestJson : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        TextAsset asset = Resources.Load<TextAsset>("Json/JsonItem");
        string json = asset.text;
        List<int> data=JsonMapper.ToObject<List<int>>(json);
        Debug.Log(data[0]);
    }
}

LitJson(JsonMapper.ToObject())示例:引用前文的JSON道具数据(稍作修改)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;

public class TestJson : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //TestJsonData();
        TestItem();
    }
    public void TestJsonData()
    {
        TextAsset asset = Resources.Load<TextAsset>("Json/JsonItem");
        string json = asset.text;
        JsonData data=JsonMapper.ToObject(json);
        Debug.Log(data[0]);
    }
    void TestItem()
    {
        TextAsset asset = Resources.Load<TextAsset>("Json/WItem");
        string json = asset.text;
        JsonData data = JsonMapper.ToObject(json);
        Debug.Log(data[1]["Description"]);
    }
}

C#数据转json(litJson):

void TestToJson()
    {
        Debug.Log(JsonMapper.ToJson(new List<int> { 111, 222, 333 }));
        Debug.Log(JsonMapper.ToJson(new Dictionary<int, string> { { 1, "aa" }, { 2, "bb" },{ 3,"cc"} }));

        JsonData data = new JsonData();
        data["User"] = "admin";
        data["id"] = 123;
        data["Password"] = "15999";
        data["Des"] = null;
        Debug.Log(data.ToJson());
    }

TextAsset可以接受的文件类型

.txt    .html    .htm   .xml   .bytes     .json     .csv   .yaml   .fnt

该系列专栏为网课课程笔记,仅用于学习参考。    

相关文章:

  • 对象克隆以及BigInteger()方法,与BigDecima()方法的学习
  • 使用CSS3实现炫酷的3D翻转卡片效果
  • Linux信号处理:从“死亡快递“到系统级心跳的奇幻漂流
  • 鸿蒙特效教程10-卡片展开/收起效果
  • 物联网(IoT)系统中,数据采集器拿来即用
  • sqli-labs学习笔记
  • 第八章 | 函数修饰符与访问控制模式
  • 2024年MathorCup数学建模D题量子计算在矿山设备配置及运营中的建模应用解题文档与程序
  • Java算法OJ(13)双指针
  • 玄机-第五章 linux实战-黑链的测试报告
  • JavaScript案例0322
  • 【系统架构设计师】调用/返回体系结构风格
  • Linux下Tomcat安装与配置
  • 批量将 PPT 文档中的图片提取到文件夹
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例11,TableView15_11带分页的导出表格示例
  • 基于CNN的FashionMNIST数据集识别5——GoogleNet模型
  • 基于腾讯云大模型知识引擎×DeepSeek的高等职业学校单独招生二级学院考前咨询系统
  • React多层级对象改变值--immer
  • 网络命令控制ESP32管脚打开
  • ArkUI-List组件
  • 河南省委常委会会议:坚持以案为鉴,深刻汲取教训
  • 刘永明|在从普及到提高中发展新大众文艺
  • 周启鸣加盟同济大学,曾任香港浸会大学深圳研究院院长
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 中国恒大:清盘人向香港高等法院申请撤回股份转让
  • 书法需从字外看,书法家、学者吴本清辞世