Unity——JSON的读取

简介: Unity——JSON的读取

一、读取JSON

在实际中,读取JSON比保存JSON重要得多。因为存档、发送数据包往往可以采用其他序列化方法,但游戏的配置文件使用JSON格式比较常见。游戏的配置数据不属于动态数据,属于游戏资源,但很适合用JSON表示。

下面以一个简单的JSON数据文件为例,演示读取JSON。从整体上看有两种思路

  • 直接整体反序列化为数据对象
  • 通过写代码逐步读取内容
{
  "students": [
    {
      "name": "Alice",
      "age": 20,
      "major": "Computer Science"
    },
    {
      "name": "Bob",
      "age": 22,
      "major": "Engineering"
    },
    {
      "name": "Carol",
      "age": 21,
      "major": "Business"
    }
  ]
}

1、整体反序列化

LitJSON库支持直接将JSON字符串反序列化为C#对象,但是为了方便使用,最好先准备一个数据结构与JSON完全对应的对象。示例如下:

[System.Serializable]
public class Student
{
    public string name;
    public int age;
    public string major;
}

这个类使用了[System.Serializable]属性,以便在序列化和反序列化 JSON 数据时能够正确处理。该类有三个属性,分别表示学生的姓名(name)、年龄(age)和专业(major)。

用LitJson.JsonMapper方法实现反序列化

using UnityEngine;
using System.Collections.Generic;
using LitJson;
public class JSONDeserializer : MonoBehaviour
{
    public TextAsset jsonFile;
    void Start()
    {
        string jsonString = jsonFile.text;
        StudentsData data = JsonMapper.ToObject<StudentsData>(jsonString);
        List<Student> students = data.students;
        // 遍历学生列表并输出信息
        foreach (Student student in students)
        {
            Debug.Log("Name: " + student.name);
            Debug.Log("Age: " + student.age);
            Debug.Log("Major: " + student.major);
            Debug.Log("------------------");
        }
    }
}
[System.Serializable]
public class StudentsData
{
    public List<Student> students;
}
[System.Serializable]
public class Student
{
    public string name;
    public int age;
    public string major;
}

JSON源文件应当放在Resources/Json文件夹下,将上文的脚本挂载到任意物体上即可进行测试,系统会在Console窗口中输出所有道具的信息。

可以看到,直接序列化对象的优点是简单易行,只要定义好了数据类型,就可以直接将JSON转化为方便实用的对象。但缺点也很明显,即JSON对数据类型的要求十分严格。

2、分步获取数据

下面是分布读取JSON信息的例子

using UnityEngine;
using System.Collections.Generic;
using LitJson;
public class JSONDeserializer : MonoBehaviour
{
    public TextAsset jsonFile;
    void Start()
    {
        string jsonString = jsonFile.text;
        JsonData jsonData = JsonMapper.ToObject(jsonString);
        // 读取顶层数据对象
        string name = (string)jsonData["name"];
        int age = (int)jsonData["age"];
        string major = (string)jsonData["major"];
        Debug.Log("Name: " + name);
        Debug.Log("Age: " + age);
        Debug.Log("Major: " + major);
        Debug.Log("------------------");
        // 读取嵌套对象列表
        JsonData studentsData = jsonData["students"];
        for (int i = 0; i < studentsData.Count; i++)
        {
            JsonData studentData = studentsData[i];
            string studentName = (string)studentData["name"];
            int studentAge = (int)studentData["age"];
            string studentMajor = (string)studentData["major"];
            Debug.Log("Name: " + studentName);
            Debug.Log("Age: " + studentAge);
            Debug.Log("Major: " + studentMajor);
            Debug.Log("------------------");
        }
    }
}

这个示例代码假设 JSON 数据文件的顶层结构与上述示例相同。在Start方法中,我们首先将 JSON 字符串解析为JsonData对象,然后逐行读取其中的数据。

首先,我们读取顶层数据对象的姓名、年龄和专业,并打印到日志中。然后,我们读取名为students的嵌套对象列表,使用循环迭代每个学生的数据。在每次迭代中,我们读取学生对象的姓名、年龄和专业,并打印到日志中。

通过这种方式,你可以逐行读取 JSON 数据,并按需处理其中的内容。注意要将 JSON 数据文件分配给jsonFile变量,并确保引入了 LitJson 命名空间。


相关文章
|
4月前
|
存储 JSON C#
Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)
Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)
|
5月前
|
存储 JSON C#
【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)
【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)
77 0
|
JSON vr&ar 图形学
【100个 Unity小知识点】 | Unity读取txt或者Json文件,包括 换行符 的方法
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【100个 Unity小知识点】 | Unity读取txt或者Json文件,包括 换行符 的方法
|
XML 存储 JSON
|
SQL JSON C#
Unity Excel转Json小工具excel2json
在开发中表格转字符数据必不可少,在Github搜到一个小工具excel2json,还不错,并且支持批量操作 给出的官方文档:https://neil3d.
2647 0
|
图形学
Unity 3D读取Excel表格、导入信息、导出Json
Unity 3D读取/导入Excel表格 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chin...
1926 0
|
5月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
50 0
|
5月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
52 0
|
5月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
41 0