Unity中使用JsonUtility解析Json

本文介绍了在Unity中如何使用JsonUtility解析Json文件。强调了Json文件的编写语法,需要保存为UTF-8格式以避免中文乱码。同时,确保Json字符串中的字段名与C#模型类的成员变量名匹配。将Json文件放入StreamingAssets文件夹,便于在项目导出后仍能修改。最后,展示了如何根据需求获取和使用Json数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,写好Json文件,语法可以参考这里
http://www.runoob.com/json/json-tutorial.html

举例:


记得另存为保存为UTF-8格式(否则中文数据会乱码)

 

模型类:

using System.Collections.Generic;
using System.IO;
using System;

[Serializable]
public class MainJson
{
    public string ResourcePath;
    public int ProjectNumber;
    public string PictureFormat;
    public List<CategoriesGroup> Categories;
}

[Serializable]
public class CategoriesGroup
{
    public string name;
    public string intro;
}

注意json字符串里的名字与C#里需要保持一致

 

加载Json文件:

    public static MainJson LoadJsonFromFile()
    {
        //json文件存放地址
        if (!File.Exists(Application.dataPath +
### UnityJsonUtility 对数组格式的支持 在 Unity 开发环境中,`JsonUtility` 是内置的一个用于处理 JSON 数据的工具类。对于数组格式的数据,`JsonUtility` 支持解析由对象组成的数组结构。 考虑如下 JSON 字符串: ```json { "Player": [ { "id": 1001, "name": "王二", "job": 1 }, { "id": 1002, "name": "小红", "job": 2 } ] } ``` 为了能够利用 `JsonUtility.FromJson<T>` 或者 `JsonUtility.FromJsonOverwrite` 来解析上述 JSON 数组,需要先定义相应的 C# 类来匹配 JSON 结构[^2]。 #### 定义对应的 C# 类型 针对上面的例子,可以创建两个类:一个是代表单个玩家信息的 `PlayerInfo` 类;另一个是用来封装这些玩家列表的容器类 `PlayersContainer`: ```csharp using System.Collections.Generic; [System.Serializable] public class PlayerInfo { public int id; public string name; public int job; } [System.Serializable] public class PlayersContainer { public List<PlayerInfo> Player; } ``` 注意这里使用了 `[System.Serializable]` 属性标记以便让 `JsonUtility` 能够识别并序列化/反序列化这些字段[^3]。 #### 使用 JsonUtility 进行解析 有了合适的类型之后就可以调用 `JsonUtility.FromJson<PlayersContainer>(jsonString)` 将 JSON 字符串转换成 C# 实体实例了。这表明即使是对复杂嵌套的对象集合形式,只要遵循特定规则构建好映射关系,`JsonUtility` 同样能有效完成解析工作[^4]。 然而值得注意的是,尽管 `JsonUtility` 可以很好地应对大多数情况下的简单到复杂的 JSON 数据,但对于某些高级特性(比如泛型或者更灵活的数据绑定),可能还需要借助其他库如 Newtonsoft.Json 才能满足需求[^5]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值