unity json
时间: 2025-02-06 22:08:18 浏览: 38
### 如何在 Unity 中解析和生成 JSON 数据
#### 使用 `JsonUtility` 进行简单对象的序列化与反序列化
对于简单的 JSON 序列化和反序列化操作,可以使用 Unity 自带的 `JsonUtility` 工具。为了使自定义的数据类能够被正确地转换成 JSON 字符串或从 JSON 字符串中读取,该类需要标记 `[System.Serializable]` 属性[^1]。
```csharp
using UnityEngine;
[System.Serializable]
public class PlayerData {
public int health;
public string name;
}
// 将 C# 对象转为 JSON 字符串
PlayerData player = new PlayerData {health = 100, name = "Hero"};
string jsonString = JsonUtility.ToJson(player);
Debug.Log(jsonString);
// 由 JSON 字符串恢复为 C# 对象
PlayerData loadedPlayer = JsonUtility.FromJson<PlayerData>(jsonString);
Debug.Log(loadedPlayer.name + ": " + loadedPlayer.health);
```
需要注意的是,`JsonUtility` 不支持复杂的嵌套结构以及某些特定类型的属性,这可能限制其应用场景[^3]。
#### 利用第三方库 LitJson 处理更灵活的情况
当遇到较为复杂的数据模型或是希望拥有更多功能时,则可以选择引入外部库如 LitJson 来完成任务。通过这种方式不仅可以轻松访问 JSON 数组中的元素还可以方便地遍历整个文档树形结构来获取所需的信息[^2]。
下面是一个利用 LitJson 实现异步加载并解析远程 JSON 文件的例子:
```csharp
using LitJson;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
IEnumerator LoadAndParseRemoteJson() {
var uri = new System.Uri(Path.Combine(Application.streamingAssetsPath, "data.json"));
using (UnityWebRequest request = UnityWebRequest.Get(uri)) {
yield return request.SendWebRequest();
if (!request.isNetworkError && !request.isHttpError) {
string jsonStr = request.downloadHandler.text;
// 假设我们有一个根节点名为 RootObject 的类用于映射返回的结果
RootObject data = JsonMapper.ToObject<RootObject>(jsonStr);
foreach(var item in data.items){
Debug.Log(item.ToString());
}
} else {
Debug.LogError($"Failed to load file: {request.error}");
}
}
}
```
此方法允许开发者更加自由地控制如何构建应用程序内部使用的数据表示形式,并且提供了更好的错误处理机制[^4]。
阅读全文
相关推荐













