JsonUtility读写json简单应用

news2025/1/17 3:51:21

使用Unity提供的JsonUtility 简单封装了一个将数据以json格式存储到本地,方便数据读写的案例;

一共三个脚本:

MyJsonRW : 提供SaveJsonData和LoadWithJson,实现数据与json的转换和读写;

TestData : 测试数据类,列举了部分常用的简单数据类型(不过有坑,后面会说);

MyJsonExample : 例子实践,随便弄的UI;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;

public class MyJsonRW
{
    public static void SaveJsonData<T>(string path, T data)
    {
        if (string.IsNullOrEmpty(path))
        {
            Debug.LogError("存储路径不存在");
            return;
        }

        string json = JsonUtility.ToJson(data, true);
        File.WriteAllText(path, json);
        Debug.Log("json存储完成,路径:" + path);
    }

    public static T LoadWithJson<T>(string path)
    {
        if (string.IsNullOrEmpty(path))
        {
            Debug.LogError("读取路径不存在");
            return default(T);
        }

        string text = File.ReadAllText(path);
        T info = JsonUtility.FromJson<T>(text);
        Debug.Log("读取 " + path + " 完成");
        return info;
    }
}

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

[System.Serializable]
public class TestData
{
    public string str = "abc123测试";
    public int num = 1123456;
    public float f = 66589.451f;
    public bool flag = true;
    public List<string> list = new List<string>();

    public void InitData()
    {
        list = new List<string>();
        for (int i = 0; i < 5; i++)
        {
            string s = "list_data_" + i;
            list.Add(s);
        }
    }

    public void InitData(TestData data)
    {
        Debug.Log("读取数据==>");
        str = data.str;
        Debug.Log("str =" + str);
        num = data.num;
        Debug.Log("num =" + num);
        f = data.f;
        Debug.Log("f =" + f);
        flag = data.flag;
        Debug.Log("flag =" + (flag ? "true" : "false"));
        list = data.list;
        for (int i = 0; i < list.Count; i++)
        {
            Debug.Log(list[i]);
        }
    }
}

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

public class MyJsonExample : MonoBehaviour
{
    TestData data = new TestData();

    string path = @"C:\Users\PC_20201126\Desktop\MyJson.json";

    // Start is called before the first frame update
    void Start()
    {
        data.InitData();
    }

    public void SaveTest()
    {
        MyJsonRW.SaveJsonData<TestData>(path, data);
    }

    public void LoadTest()
    {
        TestData L_data = MyJsonRW.LoadWithJson<TestData>(path);
        L_data.InitData(L_data);
    }
   
}

UI长这样😁

运行后的Log如下图:

生成的json文件内容如下:

机智的小伙伴已经看到我红框里的内容了,是的浮点数有问题,代码里是 public float f = 66589.451f;

存储的,读取的,都不是这个数😂. 其他帖子给出的办法都是浮点数以string格式读写(就是存储的时候先转string,读取的时候再转回来);

还有遇到本地json里的内容是{},没有其他东西,但是读写数据都正常; 数据类成员变量没有公有化,就是要写成public ;

至于其他问题,如不支持枚举,只接受一个json对象,对泛型的支持不够友好等,网上基本都有解决方案,不在这里做过多赘述;第三方的json工具也不少,不一定非要用这个.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新诤信张强—兔年展望|2023-2025:看风的必不撒种、望云的必不收割

新诤信知识产权服务股份有限公司 首席技术官 张强 “看风的必不撒种、望云的必不收割”出自古老的犹太智慧书《传道书》&#xff0c;意思是&#xff0c;如果要等刮风才撒种&#xff0c;快要下雨才收割&#xff0c;一切就都来不及了。元宇宙的发展布局&#xff0c;也是这个道理…

基础算法[四]之图的那些事儿

文章目录前言图的表示邻接矩阵邻接表结构存储遍历路径搜索多源最短路问题问题描述Floyd实现模板单源最短路径问题Dijkstra算法朴素版本堆优化邻接表python实现Bellman-Ford 算法实现SPFA 算法实现python 版本判断负环小结最小生成树Prim算法Kruskra算法实现python版本二分图二分…

网络资源归档标准WARC介绍

WARC---Web ARChive 01 ● WARC格式概述 ● WARC&#xff08;Web ARChive&#xff09;格式是网络资源存档中使用的常见文件格式&#xff0c;全称为Web Archive File Format&#xff0c;由互联网保存联盟&#xff08;International Internet Preservation Consortium&#xff0…

2023年1月6日星期五-PPP/BPP相关学习

独立均匀分布matlab的rand指令可以帮助我们生成[0,1]的均匀分布的数据,这样,如果我们想要[a,b]的分布数据,只需要a+(b-a)*rand就可以了。 [a,b] 均值,标准差 均值

Git 常用基本命令

文章目录基本命令仓库相关命令提交相关命令分支相关命令tag 相关命令撤销相关命令IDEA Git 相关操作仓库相关操作提交相关操作提交代码步骤分支相关操作tag 相关操作撤销相关操作参考资料本文主要介绍 Git 常用的基本命令。基本命令 仓库相关命令 创建新仓库 git init克隆项…

C#,图像二值化(15)——全局阈值的一维最大熵(1D maxent)算法及源程序

1、最大熵&#xff08;maxent&#xff09; 最大熵&#xff08;maxent&#xff09;方法植根于信息理论&#xff0c;并已成功应用于许多领域&#xff0c;包括物理学和自然语言处理。它创建了一个模型&#xff0c;该模型最好地解释了可用数据&#xff0c;但有一个约束&#xff0c…

甘特图中的依赖关系是什么?

依赖关系是甘特图应用中常见的概念。甘特图依赖关系也称为任务依赖关系&#xff0c;它是指项目任务之间的关系&#xff0c;需要按特定顺序执行一个或多个任务才能完成某项任务&#xff0c;依赖于完成前一任务的任务是后继任务&#xff0c;而其依赖的任务是前导任务。依赖关系一…

字典特征提取、文本特征提取、jieba分词处理、tf-idf文本特征提取概念及代码实现

一、特征提取 特征提取&#xff1a;将任意数据&#xff08;如文本或图像&#xff09;转换为可用于机器学习的数字特征&#xff0c;特征值化是为了计算机更好的去理解数据 特征提取api&#xff1a;sklearn.feature_extraction 特征提取分类 字典特征提取(特征离散化)文本特征…

小蓝本 第一本《因式分解技巧》 第九章 待定系数法 笔记 (第九天)

小蓝本 第一本《因式分解技巧》 第九章 待定系数法 笔记 &#xff08;第九天&#xff09;前言待定系数法二次因式一次因式分解缺陷二次因式分解方法注意既约的情况拓展习题9题目题解前言 已经进行了9天&#xff0c;第八章有一点烧脑&#xff0c;但感觉还是很不错的&#xff0c…

Python类继承:深入了解

引言 前段时间刚好学习了&#xff0c;C中类方面的内容&#xff0c;发现和Python中有许多不同之处&#xff0c;尤其是在类的继承这一块&#xff0c;今天有空&#xff0c;正好写篇文章&#xff0c;记录一下有兴趣的东西&#xff0c;也算是对Python的一个复习。 1 C中的构造析构函…

设计模式学习(二):Observer观察者模式

一、什么是Observer模式在Observer模式中&#xff0c;当观察对象的状态发生变化时&#xff0c;会通知给观察者。Observer模式适用于根据对象状态进行相应处理的场景。简单一句话概况就是&#xff1a;观察者会发送观察对象状态变化的通知。二、Observer模式示例代码下面示例程序…

10种顶流聚类算法Python实现(附完整代码)

目录 前言 一、聚类 二、聚类算法 三、聚类算法示例 1、库安装 2、聚类数据集 3、亲和力传播 4、聚合聚类 5、BIRCH 6、DBSCAN 7、K均值 8、Mini-Batch K-均值 9、均值漂移聚类 10、OPTICS 11、光谱聚类 12、高斯混合模型 三、总结 前言 今天给大家分享一篇关…

虚幻五引擎的出现会不会导致技术美术需求的下降?

先来结论&#xff1a;不会&#xff0c;虚幻五引擎的出现反而会致使技术美术需求的增加。 UE5主要引入的两大新技术 Nanite ​ 渲染技术Nanite&#xff0c;能够直接在游戏里表现出影视级别的超高精度模型。在演示中有一个古代雕塑的镜头&#xff0c;使用的模型超过3300万多边形…

Spring MVC阶段测试

Spring MVC阶段测试 1.新建Maven项目&#xff0c;静态资源文件&#xff0c;如JS、CSS、图片应存放在&#xff08; C &#xff09;目录下。 A、src/main/java B、src/test/java C、src/main/resources/static D、src/main/resources/templates 2.新建Maven项目&#xff0c…

无风扇工控主机支持一路CAN总线

CAN 接口如图所示&#xff0c;输入如下命令&#xff1a; ifconfig -a //查看所有网卡 如果 FlexCAN 驱动工作正常的话就会看到 CAN 对应的网卡接口&#xff0c;如图。从图中可 以看出&#xff0c;有一个名为“can0”的网卡&#xff0c;这个就是 BL302 板上的 CAN1 接口对应的 c…

Selenium用法详解【设置元素等待】【JAVA爬虫】

简介本文主要介绍如何使用java代码利用Selenium操作浏览器&#xff0c;某些网页元素加载慢&#xff0c;如何操作元素就会把找不到元素的异常&#xff0c;此时需要设置元素等待&#xff0c;等待元素加载完&#xff0c;再操作。设置元素等待很多页面都使用 ajax 技术&#xff0c;…

Python - Flask 整合 UEditor

1. 引言 UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本 web 编辑器&#xff0c;具有轻量&#xff0c;可定制&#xff0c;注重用户体验等特点&#xff0c;开源基于MIT协议&#xff0c;允许自由使用和修改代码 官方文档地址&#xff1a;http://fex.baidu.com/ued…

软件构造与与体系结构习题

软件构造与与体系结构习题第一章第二章第三章第一章 1.下面关于类的描述正确的是&#xff1f;A A、类是一组相似事物的统称。 B、一个事物可以称为一类。 C、两个完全相同的事物可以称为一类。 D、“奥巴马”和“特朗普”可以统称为“奥巴马”。 解析&#xff1a; 类&am…

【Python笔记】课时01:Python3+Pip环境配置(python安装)

1. 不同环境下安装python windows&#xff08;不好安装相关python包&#xff0c;不推荐&#xff09;anaconda&#xff08;科学计算环境 python 相关python包&#xff09;&#xff08;推荐&#xff09;linux&#xff08;如 ubuntu&#xff09;macos 2.1. windows 安装 pytho…

前端性能优化(五):webpack构建优化

目录 一&#xff1a;webpack的优化配置 1.1.Tree-shaking 1.2.JS压缩 1.3.作用域提升 1.4.Babel 优化配置 二&#xff1a;webpack的依赖优化 2.1.noParse&#xff08;不解析&#xff09; 2.2.DllPlugin 三&#xff1a;webpack 细节优化 四&#xff1a;webpack的资源压…