• 您的位置:首页 > 新闻动态 > Unity3D

    Json文件操作(创建、读取、解析、修改)

    2022/9/11      点击:

    创建Json文件


    如果我们要先生成Json文件的,就可以使用IO命名空间的StreamWriter类:

    首先,我们先写一个字段类Person,类里面有string类型的“Name”和int类型的“Grade”,然后写一个"Data1”数据类,里面存放的使我们的字段类Person数组:


    [System.Serializable]
    class Person
    {
        public string Name;
        public int Grade;
    }
    [System.Serializable]
    class Data1
    {
        public Person[] Person;
    }
    然后生成Json数据,将Json数据保存到文件中:



    using System.IO;
    using UnityEngine;
    
    [System.Serializable]
    class Person
    {
        public string Name;
        public int Grade;
    }
    [System.Serializable]
    class Data
    {
        public Person[] Person;
    }
    public class Demo5 : MonoBehaviour
    {
        void Start()
        {
            WriteData();
        }
    
        //写数据
        public void WriteData()
        {
            //新建一个数据类
            Data m_Data = new Data();
            //新建一个字段类 进行赋值
            m_Data.Person = new Person[5];
            for (int i = 0; i < 5; i++)
            {
                Person m_Person = new Person();
                m_Person.Name = "User" + i;
                m_Person.Grade = i + 50;
                m_Data.Person[i] = m_Person;
            }
            //将数据转成json
            string js = JsonUtility.ToJson(m_Data);
            //获取到项目路径
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.txt";
            //打开或者新建文档
            using (StreamWriter sw =new StreamWriter(fileUrl))
            {
                //保存数据
                sw.WriteLine(js);
                //关闭文档
                sw.Close();
                sw.Dispose();
            }
        }
    }
    在这里,我们是新建了两个数据实体类,一个叫Data一个叫Person,它们都有特性:[System.Serializable],也就是序列化,只有加上这个特性,类里面的数据才能正常的转成Json数据。



    读取Json文件数据

    读取数据,我们使用IO命名空间下的File类的OpenText()函数进行读取:



    using System.IO;
    using UnityEngine;
    public class Demo5 : MonoBehaviour
    {
        void Start()
        {
            string jsonData = ReadData();
            Debug.Log(jsonData);
        }
        //读取文件
        public string ReadData()
        {
            //string类型的数据常量
            string readData;
            //获取到路径
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.json";
            //读取文件
            using (StreamReader sr =File.OpenText(fileUrl))
            {
                //数据保存
                readData = sr.ReadToEnd();
                sr.Close();
            }
            //返回数据
            return readData;
        }
    }

    解析数据


    using System.IO;
    using UnityEngine;
    
    [System.Serializable]
    class Person
    {
        public string Name;
        public int Grade;
    }
    [System.Serializable]
    class Data
    {
        public Person[] Person;
    }
    public class Demo5 : MonoBehaviour
    {
        void Start()
        {
            string jsonData = ReadData();
            Data m_PersonData = JsonUtility.FromJson(jsonData);
            foreach (Person item in m_PersonData.Person)
            {
                Debug.Log(item.Name);
                Debug.Log(item.Grade);
            }
        }
    
        //读取文件
        public string ReadData()
        {
            //string类型的数据常量
            string readData;
            //获取到路径
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.json";
            //读取文件
            using (StreamReader sr =File.OpenText(fileUrl))
            {
                //数据保存
                readData = sr.ReadToEnd();
                sr.Close();
            }
            //返回数据
            return readData;
        }
    }

    修改数据

    using System.IO;
    using UnityEngine;
    
    [System.Serializable]
    class Person
    {
        public string Name;
        public int Grade;
    }
    [System.Serializable]
    class Data
    {
        public Person[] Person;
    }
    public class Demo5 : MonoBehaviour
    {
        void Start()
        {
            //读取数据
            string jsonData = ReadData();
            //解析数据
            Data m_PersonData = JsonUtility.FromJson(jsonData);
            //找到数据修改数据
            foreach (Person item in m_PersonData.Person)
            {
                if (item.Name == "User2")
                {
                    item.Grade = 58;
                }
            }
            //转成json,然后保存数据
            string json = JsonUtility.ToJson(m_PersonData);
            AlterData(json);
        }
    
        //读取文件
        public string ReadData()
        {
            //string类型的数据常量
            string readData;
            //获取到路径
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.json";
            //读取文件
            using (StreamReader sr = File.OpenText(fileUrl))
            {
                //数据保存
                readData = sr.ReadToEnd();
                sr.Close();
            }
            //返回数据
            return readData;
        }
    
        //修改数据
        public void AlterData(string content)
        {
            //获取到路径
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.json";
            //读取文件
            using (StreamWriter sr = new StreamWriter(fileUrl))
            {
                //数据保存
                sr.WriteLine(content);
                sr.Close();
            }
        }
    }
    本文来自网络,版权归原作者所有