• 您的位置:首頁 > 新聞動態(tài) > Unity3D

    Json文件操作(創(chuàng)建、讀取、解析、修改)

    2022/9/11??????點(diǎn)擊:

    創(chuàng)建Json文件


    如果我們要先生成Json文件的,就可以使用IO命名空間的StreamWriter類:

    首先,我們先寫一個(gè)字段類Person,類里面有string類型的“Name”和int類型的“Grade”,然后寫一個(gè)"Data1”數(shù)據(jù)類,里面存放的使我們的字段類Person數(shù)組:


    [System.Serializable]
    class Person
    {
        public string Name;
        public int Grade;
    }
    [System.Serializable]
    class Data1
    {
        public Person[] Person;
    }
    然后生成Json數(shù)據(jù),將Json數(shù)據(jù)保存到文件中:



    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();
        }
    
        //寫數(shù)據(jù)
        public void WriteData()
        {
            //新建一個(gè)數(shù)據(jù)類
            Data m_Data = new Data();
            //新建一個(gè)字段類 進(jìn)行賦值
            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;
            }
            //將數(shù)據(jù)轉(zhuǎn)成json
            string js = JsonUtility.ToJson(m_Data);
            //獲取到項(xiàng)目路徑
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.txt";
            //打開或者新建文檔
            using (StreamWriter sw =new StreamWriter(fileUrl))
            {
                //保存數(shù)據(jù)
                sw.WriteLine(js);
                //關(guān)閉文檔
                sw.Close();
                sw.Dispose();
            }
        }
    }
    在這里,我們是新建了兩個(gè)數(shù)據(jù)實(shí)體類,一個(gè)叫Data一個(gè)叫Person,它們都有特性:[System.Serializable],也就是序列化,只有加上這個(gè)特性,類里面的數(shù)據(jù)才能正常的轉(zhuǎn)成Json數(shù)據(jù)。



    讀取Json文件數(shù)據(jù)

    讀取數(shù)據(jù),我們使用IO命名空間下的File類的OpenText()函數(shù)進(jìn)行讀取:



    using System.IO;
    using UnityEngine;
    public class Demo5 : MonoBehaviour
    {
        void Start()
        {
            string jsonData = ReadData();
            Debug.Log(jsonData);
        }
        //讀取文件
        public string ReadData()
        {
            //string類型的數(shù)據(jù)常量
            string readData;
            //獲取到路徑
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.json";
            //讀取文件
            using (StreamReader sr =File.OpenText(fileUrl))
            {
                //數(shù)據(jù)保存
                readData = sr.ReadToEnd();
                sr.Close();
            }
            //返回?cái)?shù)據(jù)
            return readData;
        }
    }

    解析數(shù)據(jù)


    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類型的數(shù)據(jù)常量
            string readData;
            //獲取到路徑
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.json";
            //讀取文件
            using (StreamReader sr =File.OpenText(fileUrl))
            {
                //數(shù)據(jù)保存
                readData = sr.ReadToEnd();
                sr.Close();
            }
            //返回?cái)?shù)據(jù)
            return readData;
        }
    }

    修改數(shù)據(jù)

    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()
        {
            //讀取數(shù)據(jù)
            string jsonData = ReadData();
            //解析數(shù)據(jù)
            Data m_PersonData = JsonUtility.FromJson(jsonData);
            //找到數(shù)據(jù)修改數(shù)據(jù)
            foreach (Person item in m_PersonData.Person)
            {
                if (item.Name == "User2")
                {
                    item.Grade = 58;
                }
            }
            //轉(zhuǎn)成json,然后保存數(shù)據(jù)
            string json = JsonUtility.ToJson(m_PersonData);
            AlterData(json);
        }
    
        //讀取文件
        public string ReadData()
        {
            //string類型的數(shù)據(jù)常量
            string readData;
            //獲取到路徑
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.json";
            //讀取文件
            using (StreamReader sr = File.OpenText(fileUrl))
            {
                //數(shù)據(jù)保存
                readData = sr.ReadToEnd();
                sr.Close();
            }
            //返回?cái)?shù)據(jù)
            return readData;
        }
    
        //修改數(shù)據(jù)
        public void AlterData(string content)
        {
            //獲取到路徑
            string fileUrl = Application.streamingAssetsPath + "\\jsonInfo.json";
            //讀取文件
            using (StreamWriter sr = new StreamWriter(fileUrl))
            {
                //數(shù)據(jù)保存
                sr.WriteLine(content);
                sr.Close();
            }
        }
    }
    本文來自網(wǎng)絡(luò),版權(quán)歸原作者所有