您的位置:首页 > 新闻动态 > 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();
        }
    }
}
本文来自网络,版权归原作者所有