Unity Json

解析Json文件方法1:

1、Json格式:
   {
    "textfamily": [
        {
            "name": "tao1",
            "age": 10
        },
        {
            "name": "tao2",
            "age": 20
        }
                         ]
   }

2、解析Json步骤
    
 (1) 读取Text文件:
        TextAsset t = Resources.Load<TextAsset>("json/textJson");
 (2)转化为存储对象的List
        FamilyText s = JsonMapper.ToObject<FamilyText >(t.text);
 (3)取出解析Json的数据,在对象属性上:
        foreach (textData a in s.textfamily)
        {
            Debug.Log(a.name + "+" + a.age);
        }

FamilyText 类:(List<textData>的变量名必须与Json中的对象名一致)
public class FamilyText 
{
    public List<textData> textfamily = new List<textData>();
}
textData类:
public class textData 
{
    public string name { get; set; }
    public int age { get; set; }
}
-----------------------------------------------------------------------------------------------------------
解析Json文件方法2:

1、Json格式:
{
    "people1": {
        "name": "tao1",
        "age": 10
    },
    "people2": {
        "name": "tao2",
        "age": 20
    }
}
2、解析Json步骤
 (1) 读取Text文件:
        TextAsset t = Resources.Load<TextAsset>("json/textJson");
 (2)转化为JsonNode对象:(总对象)
        JSONNode data=JSON.Parse(t.text);
 (3)取到people1,people2........的对象数组
       JSONClass obj=data.AsObject;
 (4)取到people1,people2.......对象
      JSONClass sub1=obj[0] as JSONClass;
      JSONClass sub2=obj[1] as JSONClass;
  (5)取到对象中的key值:(如“name”....)
      obj.key(0),obj.key(1).........
       sub1.AsObject.key(0),sub1.AsObject.key(1)........
       sub2.AsObject.key(0),sub2.AsObject.key(1).........
  (6)取到对象中的value值:
        sub[0].ToString(),sub[1].ToString................
--------------------------------------------------------------------------------------------------------
3、写入Json的方法
     (1)声明一个需要存储的对象:
   例如:
        textData o =new textData ();
     (2)为各属性赋值
        o.name="";   .......
     (3)转化为JSON
        string json=JsonMapper.ToJson(o);



### 如何在 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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值