jsondata遍历解析key,value unity

本文详细介绍了如何使用C#处理JSON数据,通过实例演示了如何将JSON字符串转换为C#对象,并遍历处理其中的键值对。文章重点在于解析包含多级嵌套的JSON数据结构,展示了如何通过反射机制获取并操作复杂数据类型。
var jsonD = {
	"texFiles": {
		"沙发_03_01.jpg": "u6c99u53d1u005fu0030u0033u005fu0030u0031u002eu006au0070u0067",
		"纯色黑白灰.jpg": "u7eafu8272u9ed1u767du7070u002eu006au0070u0067",
		"沙发_03_02.jpg": "u6c99u53d1u005fu0030u0033u005fu0030u0032u002eu006au0070u0067",
		"沙发_03_03.jpg": "u6c99u53d1u005fu0030u0033u005fu0030u0033u002eu006au0070u0067"
	}
}

JsonData jd = new JsonData();
JsonData modeInfo = JsonMapper.ToObject(jsonD);
if (modeInfo.ContainsKey("texFiles")) { 
	IDictionary dic = modeInfo;
	foreach (var item in dic.Values)
	{
	   IDictionary ite = item as IDictionary;
	   foreach (var temp in ite.Keys)
	   {
	       jd[temp.ToString()] = ite[temp].ToString();
	       Debug.Log("keys: "+temp+"---"+"values: "+ ite[temp]);
	   }
	}
}
using System.IO; using LitJson; using UnityEngine; using System.Collections.Generic; public class JsonManager : MonoBehaviour { // 单例实例 private static JsonManager _instance; public static JsonManager Instance { get { if (_instance == null) { GameObject go = new GameObject("JsonManager"); _instance = go.AddComponent<JsonManager>(); DontDestroyOnLoad(go); } return _instance; } } // 存储JSON文件的目录 private string _jsonDirectory; void Awake() { // 安卓平台使用持久化数据路径 _jsonDirectory = Application.persistentDataPath + "/JsonData/"; // 确保目录存在 if (!Directory.Exists(_jsonDirectory)) { Directory.CreateDirectory(_jsonDirectory); } } /// <summary> /// 检查JSON文件是否存在 /// </summary> /// <param name="fileName">文件名(不带路径)</param> /// <returns>文件是否存在</returns> public bool JsonFileExists(string fileName) { string filePath = GetFilePath(fileName); return File.Exists(filePath); } /// <summary> /// 获取完整的文件路径 /// </summary> private string GetFilePath(string fileName) { return Path.Combine(_jsonDirectory, fileName + ".json"); } /// <summary> /// 创建新的JSON文件 /// </summary> /// <param name="fileName">文件名</param> /// <param name="initialData">初始化数据</param> public void CreateJsonFile(string fileName, JsonData initialData = null) { string filePath = GetFilePath(fileName); if (JsonFileExists(fileName)) { Debug.LogWarning($"文件已存在: {filePath}"); return; } // 创建初始数据结构 JsonData data = initialData ?? new JsonData(); data.SetJsonType(JsonType.Object); // 写入文件 File.WriteAllText(filePath, data.ToJson()); Debug.Log($"创建文件成功: {filePath}"); } /// <summary> /// 保存数据到JSON文件(覆盖) /// </summary> public void SaveData<T>(string fileName, T data) { string filePath = GetFilePath(fileName); string json = JsonMapper.ToJson(data); File.WriteAllText(filePath, json); } /// <summary> /// 从JSON文件读取数据 /// </summary> public T LoadData<T>(string fileName) where T : new() { string filePath = GetFilePath(fileName); if (!JsonFileExists(fileName)) { Debug.LogWarning($"文件不存在: {filePath}"); return new T(); } try { string json = File.ReadAllText(filePath); return JsonMapper.ToObject<T>(json); } catch (System.Exception e) { Debug.LogError($"读取失败: {e.Message}"); return new T(); } } /// <summary> /// 向JSON文件添加数据 /// </summary> /// <param name="fileName">文件名</param> /// <param name="key">键</param> /// <param name="value">值(支持多种类型)</param> public void AddData(string fileName, string key, object value) { JsonData jsonData = GetJsonData(fileName); if (jsonData == null) { jsonData = new JsonData(); jsonData.SetJsonType(JsonType.Object); } // 根据值类型添加数据 if (value is int) jsonData[key] = (int)value; else if (value is float) jsonData[key] = (float)value; else if (value is double) jsonData[key] = (double)value; else if (value is string) jsonData[key] = (string)value; else if (value is bool) jsonData[key] = (bool)value; else if (value is JsonData) jsonData[key] = (JsonData)value; else jsonData[key] = JsonMapper.ToJson(value); SaveJsonData(fileName, jsonData); } /// <summary> /// 从JSON文件获取数据 /// </summary> public object GetData(string fileName, string key) { JsonData jsonData = GetJsonData(fileName); return jsonData?.ContainsKey(key) == true ? jsonData[key] : null; } /// <summary> /// 更新JSON文件中的值 /// </summary> public void UpdateData(string fileName, string key, object newValue) { AddData(fileName, key, newValue); // 添加逻辑已覆盖更新 } /// <summary> /// 从JSON文件删除数据 /// </summary> public void DeleteData(string fileName, string key) { JsonData jsonData = GetJsonData(fileName); if (jsonData != null && jsonData.ContainsKey(key)) { jsonData.Remove(key); SaveJsonData(fileName, jsonData); } } /// <summary> /// 获取JsonData对象 /// </summary> private JsonData GetJsonData(string fileName) { string filePath = GetFilePath(fileName); if (!JsonFileExists(fileName)) { Debug.LogWarning($"文件不存在: {filePath}"); return null; } try { string json = File.ReadAllText(filePath); return JsonMapper.ToObject(json); } catch (System.Exception e) { Debug.LogError($"解析失败: {e.Message}"); return null; } } /// <summary> /// 保存JsonData到文件 /// </summary> private void SaveJsonData(string fileName, JsonData jsonData) { string filePath = GetFilePath(fileName); File.WriteAllText(filePath, jsonData.ToJson()); } /// <summary> /// 创建嵌套数组结构 /// </summary> public JsonData CreateNestedArray<T>(List<T> list) { JsonData arrayData = new JsonData(); arrayData.SetJsonType(JsonType.Array); foreach (var item in list) { if (item is int) arrayData.Add((int)(object)item); else if (item is float) arrayData.Add((float)(object)item); else if (item is double) arrayData.Add((double)(object)item); else if (item is string) arrayData.Add((string)(object)item); else if (item is bool) arrayData.Add((bool)(object)item); else arrayData.Add(JsonMapper.ToJson(item)); } return arrayData; } /// <summary> /// 创建字典结构 /// </summary> public JsonData CreateDictionary<T>(Dictionary<string, T> dict) { JsonData dictData = new JsonData(); dictData.SetJsonType(JsonType.Object); foreach (var kvp in dict) { if (typeof(T) == typeof(int)) dictData[kvp.Key] = (int)(object)kvp.Value; else if (typeof(T) == typeof(float)) dictData[kvp.Key] = (float)(object)kvp.Value; else if (typeof(T) == typeof(double)) dictData[kvp.Key] = (double)(object)kvp.Value; else if (typeof(T) == typeof(string)) dictData[kvp.Key] = (string)(object)kvp.Value; else if (typeof(T) == typeof(bool)) dictData[kvp.Key] = (bool)(object)kvp.Value; else dictData[kvp.Key] = JsonMapper.ToJson(kvp.Value); } return dictData; } } 在帮我写一个获取嵌套数据和数组数据的方法 要求有示例代码
最新发布
10-01
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值