[Daily of Unity3D] Unity escribe datos Json y lee y analiza datos Json en Unity

1. Introducción

En el desarrollo diario, encontrará la necesidad de guardar datos o enviar datos. El almacenamiento de datos suele ser Json o XML. Hoy veremos cómo leer y escribir datos Json en Unity, y analizar datos Json, incluidos múltiples segmentos Analizando

2. Leer, escribir y analizar un solo dato Json

1. Escribir una sola pieza de datos Json

Primero, primero escribimos una clase de campo Persona, que tiene un tipo de cadena "Nombre" y un tipo int "Grado", y luego escribimos una clase de datos "Datos", que almacena nuestra clase de campo Persona:

[System.Serializable]
class Person
{
    public string Name;
    public int Grade;
}
[System.Serializable]
class Data
{
    public Person Person;
}

El primero es escribir datos Json:

	//写数据
    public void WriteData()
    {
    	//新建一个字段类 进行赋值
        Person m_Person = new Person();
        m_Person.Name = "User1";
        m_Person.Grade = 13;
        //新建一个数据类 将字段类赋值
        Data m_Data = new Data();
        m_Data.Person = m_Person;
        //将数据转成json
        string js = JsonUtility.ToJson(m_Data);
        //获取到项目路径
        string fileUrl = Application.streamingAssetsPath + "\\jsonInfo2.txt";
        //打开或者新建文档
        StreamWriter sw = new StreamWriter(fileUrl);
        //保存数据
        sw.WriteLine(js);
        //关闭文档
        sw.Close();
    }

Sí, debe crear una nueva carpeta StreamingAssets, de lo contrario obtendrá un error: los
Inserte la descripción de la imagen aquí
datos son los siguientes:
Inserte la descripción de la imagen aquí
no hay ningún problema con el análisis del sitio web:
Inserte la descripción de la imagen aquí

2. Leer una sola pieza de datos Json

La lectura es muy simple:

	//读取文件
    public string ReadData()
    {
    	//string类型的数据常量
        string readData = "";
        //获取到路径
        string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo2.txt";
        //读取文件
        StreamReader str = File.OpenText(fileUrl);
        //数据保存
        readData = str.ReadToEnd();
        str.Close();
        //返回数据
        return readData;
    }

Vamos, obtengamos los datos para ver si son correctos:

	void Start()
    {
        string jsonData = ReadData();
        Debug.Log(jsonData);
    }

Mira la salida de la consola:
Inserte la descripción de la imagen aquí

3. Análisis de un solo dato Json

	void Start()
    {
        string jsonData = ReadData();
        Debug.Log(jsonData);
        //数据解析并把数据保存到m_PersonData变量中
		Data m_PersonData = JsonUtility.FromJson<Data>(jsonData);
		//读取数据
        Debug.Log(m_PersonData.Person.Name);
        Debug.Log(m_PersonData.Person.Grade);
    }

Inserte la descripción de la imagen aquí
El código completo es el siguiente:

using System.IO;
using UnityEngine;

[System.Serializable]
class Person
{
    public string Name;
    public int Grade;
}
[System.Serializable]
class Data
{
    public Person Person;
}

public class TestToJson : MonoBehaviour
{
    void Start()
    {
        //WriteData();
        string jsonData = ReadData();
        Debug.Log(jsonData);

        Data m_PersonData = JsonUtility.FromJson<Data>(jsonData);
        Debug.Log(m_PersonData.Person.Name);
        Debug.Log(m_PersonData.Person.Grade);
    }


    //读取文件
    public string ReadData()
    {
        string readData = "";
        string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo2.txt";
        StreamReader str = File.OpenText(fileUrl);
        readData = str.ReadToEnd();
        str.Close();
        return readData;
    }

    //写数据
    public void WriteData()
    {
        Person m_Person = new Person();
        m_Person.Name = "User1";
        m_Person.Grade = 13;
        Data m_Data = new Data();
        m_Data.Person = m_Person;
        string js = JsonUtility.ToJson(m_Data);
        string fileUrl = Application.streamingAssetsPath + "\\jsonInfo2.txt";
        StreamWriter sw = new StreamWriter(fileUrl);
        sw.WriteLine(js);
        sw.Close();
    }
}

Tres, lectura y escritura, análisis de múltiples datos Json

1. Escribir múltiples datos Json

En primer lugar, primero escribimos una clase de campo Persona, que tiene el tipo de cadena "Nombre" y el tipo int "Grado", y luego escribimos una clase de datos "Datos1", que almacena nuestra matriz de persona de clase de campo:

[System.Serializable]
class Person
{
    public string Name;
    public int Grade;
}
[System.Serializable]
class Data1
{
    public Person[] Person;
}

El primero es escribir datos Json:

	//写数据
    public void WriteData()
    {
        //新建一个数据类
        Data1 m_Data = new Data1();
        //新建一个字段类 进行赋值
        m_Data.Persons = 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.Persons[i] = m_Person;
        }
        //将数据转成json
        string js = JsonUtility.ToJson(m_Data);
        //获取到项目路径
        string fileUrl = Application.streamingAssetsPath + "\\jsonInfo3.txt";
        //打开或者新建文档
        StreamWriter sw = new StreamWriter(fileUrl);
        //保存数据
        sw.WriteLine(js);
        //关闭文档
        sw.Close();
    }

Sí, debe crear una nueva carpeta StreamingAssets, de lo contrario obtendrá un error: los
Inserte la descripción de la imagen aquí
datos son los siguientes:
Inserte la descripción de la imagen aquí
no hay ningún problema con el análisis del sitio web:
Inserte la descripción de la imagen aquí

2. Lectura de múltiples datos Json

La lectura es muy simple:

	//读取文件
    public string ReadData()
    {
    	//string类型的数据常量
        string readData = "";
        //获取到路径
        string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo3.txt";
        //读取文件
        StreamReader str = File.OpenText(fileUrl);
        //数据保存
        readData = str.ReadToEnd();
        str.Close();
        //返回数据
        return readData;
    }

Vamos, obtengamos los datos para ver si son correctos:

	void Start()
    {
        string jsonData = ReadData();
        Debug.Log(jsonData);
    }

Mira la salida de la consola:
Inserte la descripción de la imagen aquí

3. Análisis de múltiples datos Json

	void Start()
    {
        string jsonData = ReadData();
        Debug.Log(jsonData);
        //数据解析并把数据保存到m_PersonData1 变量中
        Data1 m_PersonData1 = JsonUtility.FromJson<Data1>(jsonData);
        foreach (var item in m_PersonData1.Persons)
        {
            Debug.Log(item.Name);
            Debug.Log(item.Grade);
        }
    }

Inserte la descripción de la imagen aquí
El código completo es el siguiente:

using System.IO;
using UnityEngine;

[System.Serializable]
class Person
{
    public string Name;
    public int Grade;
}
[System.Serializable]
class Data
{
    public Person Person;
}
[System.Serializable]
class Data1
{
    public Person[] Persons;
}

public class TestToJson : MonoBehaviour
{
    void Start()
    {
        //WriteData2();
        //WriteData3();
        
		//单条数据
        //string jsonData = ReadData();
        //Debug.Log(jsonData);
        //Data m_PersonData = JsonUtility.FromJson<Data>(jsonData);
        //Debug.Log(m_PersonData.Person.Name);
        //Debug.Log(m_PersonData.Person.Grade);

		//多条数据
        string jsonData = ReadData();
        Debug.Log(jsonData);
        Data1 m_PersonData1 = JsonUtility.FromJson<Data1>(jsonData);
        foreach (var item in m_PersonData1.Persons)
        {
            Debug.Log(item.Name);
            Debug.Log(item.Grade);
        }
    }


    //读取文件
    public string ReadData()
    {
        string readData = "";
        string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo3.txt";
        StreamReader str = File.OpenText(fileUrl);
        readData = str.ReadToEnd();
        str.Close();
        return readData;
    }

    //写数据
    public void WriteData2()
    {
        Person m_Person = new Person();
        m_Person.Name = "User1";
        m_Person.Grade = 13;
        Data m_Data = new Data();
        m_Data.Person = m_Person;
        string js = JsonUtility.ToJson(m_Data);
        string fileUrl = Application.streamingAssetsPath + "\\jsonInfo2.txt";
        StreamWriter sw = new StreamWriter(fileUrl);
        sw.WriteLine(js);
        sw.Close();
    }

    //写数据
    public void WriteData3()
    {
        Data1 m_Data = new Data1();
        m_Data.Persons = 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.Persons[i] = m_Person;
        }
        string js = JsonUtility.ToJson(m_Data);
        string fileUrl = Application.streamingAssetsPath + "\\jsonInfo3.txt";
        StreamWriter sw = new StreamWriter(fileUrl);
        sw.WriteLine(js);
        sw.Close();
    }
}

Resumen:
1. No escriba su propia cadena json, de lo contrario, un corchete o un corchete será incorrecto y no
podrá resolverlo . 2. Debe conocer el formato de la cadena json que recibe y luego escribir su propia clase de datos
3. Si no está involucrado Si los datos del servidor son todos datos locales, es mejor escribirlos usted mismo

226 artículos originales publicados · 509 elogiados · 530,000 vistas

Supongo que te gusta

Origin blog.csdn.net/q764424567/article/details/101448124
Recomendado
Clasificación