【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)

简介: 【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)

JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式存储和表示数据,简洁和清晰的层次结构使JSON成为理想的数据交换语言,易于读者阅读和编写,同时也易于机器解析和生成,并有效的提高网络传输效率

1:写入JSON数据

生成JSON数据实例代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_15_1 : MonoBehaviour
{
    void Start()
    {
        WriteData();
    }
    //写数据
    public void WriteData()
    {
        //新建一个数据类
        Data m_Data = new Data();
        //新建一个字段类 进行赋值
        m_Data.Person = new Person[3];
        //添加数据
        Person p1 = new Person();
        p1.Name = "张三";
        p1.Grade = 98;
        m_Data.Person[0] = p1;
        Person p2 = new Person();
        p2.Name = "李四";
        p2.Grade = 95;
        m_Data.Person[1] = p2;
        Person p3 = new Person();
        p3.Name = "王五";
        p3.Grade = 97;
        m_Data.Person[2] = p3;
        //将数据转成json
        string js = JsonUtility.ToJson(m_Data);
        //显示Json数据
        Debug.Log(js);
    }
}
[System.Serializable]
class Person
{
    public string Name;
    public int Grade;
}
[System.Serializable]
class Data
{
    public Person[] Person;
}

2:将JSON数据保存到本地文件夹

下面的代码将JSON中数据以文本格式保存到本地文件夹

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_15_2 : MonoBehaviour
{
    void Start()
    {
        WriteData();
    }
    //写数据
    public void WriteData()
    {
        //新建一个数据类
        Data m_Data = new Data();
        //新建一个字段类 进行赋值
        m_Data.Person = new Person[3];
        //添加数据
        Person p1 = new Person();
        p1.Name = "张三";
        p1.Grade = 98;
        m_Data.Person[0] = p1;
        Person p2 = new Person();
        p2.Name = "李四";
        p2.Grade = 95;
        m_Data.Person[1] = p2;
        Person p3 = new Person();
        p3.Name = "王五";
        p3.Grade = 97;
        m_Data.Person[2] = p3;
        //将数据转成json
        string js = JsonUtility.ToJson(m_Data);
        //保存到 C盘的 Temp文件夹
//下面的代码改变保存路径即可
        string fileUrl = @"c:\Temp\jsonInfo.txt";
        //打开或者新建文档
        StreamWriter sw = new StreamWriter(fileUrl);
        //保存数据
        sw.WriteLine(js);
        //关闭文档
        sw.Close();
    }
}
[System.Serializable]
class Person
{
    public string Name;
    public int Grade;
}
[System.Serializable]
class Data
{
    public Person[] Person;
}

3:读取JSON数据

读取JSON数据用到了之前讲解过的文件的输入与输出,将使用StreamReader从文件夹中读取流数据

using System.IO;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_15_3 : MonoBehaviour
{
    void Start()
    {
        string jsonData = ReadData();
        Debug.Log(jsonData);
    }
    //读取文件
    public string ReadData()
    {
        //获取到路径
        string fileUrl = @"c:\Temp\jsonInfo.txt";
        //读取文件
        StreamReader str = File.OpenText(fileUrl);
        //string类型的数据常量
        //数据保存
        string readData = str.ReadToEnd();
        str.Close();
        //返回数据
        return readData;
    }
}

4:解析JSON数据

解析JSON数据,需要生成与JSON数据类型相同的字段,如果JSON数据中有字段Person,Name,Grade,Person字段是一个数组,那么根节点就是一个带有Person数组字段的类,然后这个Person字段本身也是一个类,里面有Name和Grade字段 解析JSON数据代码如下

using System.IO;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_15_4 : MonoBehaviour
{
    void Start()
    {
        //首先获取到json数据
        string json = ReadData();
        //将json数据传递给ParseData函数进行解析
        ParseData(json);
    }
    //读取文件
    public string ReadData()
    {
        //获取到路径
        string fileUrl = @"c:\Temp\jsonInfo.txt";
        //读取文件
        StreamReader str = File.OpenText(fileUrl);
        //string类型的数据常量
        //数据保存
        string readData = str.ReadToEnd();
        str.Close();
        //返回数据
        return readData;
    }
    //解析Json数据
    public void ParseData(string jsonData)
    {
        //数据解析并把数据保存到m_PersonData1 变量中
        Data m_PersonData = JsonUtility.FromJson<Data>(jsonData);
        foreach (var item in m_PersonData.Person)
        {
            Debug.Log(item.Name);
            Debug.Log(item.Grade);
        }
    }
}

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
7月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1269 29
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
786 4
JSON数据解析实战:从嵌套结构到结构化表格
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
523 4
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
存储 前端开发 JavaScript
在线教育网课系统源码开发指南:功能设计与技术实现深度解析
在线教育网课系统是近年来发展迅猛的教育形式的核心载体,具备用户管理、课程管理、教学互动、学习评估等功能。本文从功能和技术两方面解析其源码开发,涵盖前端(HTML5、CSS3、JavaScript等)、后端(Java、Python等)、流媒体及云计算技术,并强调安全性、稳定性和用户体验的重要性。
|
机器学习/深度学习 自然语言处理 算法
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
3767 1
|
存储 XML 图形学
Unity保存数据
在Unity中保存场景数据涉及数据收集、序列化和存储。数据收集包括游戏对象的基本信息(如位置、旋转、缩放、名称和标签)及组件数据(如渲染、物理和自定义脚本组件)。接着,通过序列化将数据转换为可存储格式。示例代码展示了如何使用XML保存场景中的游戏对象及其属性。
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS