Json解析
#region Json解析相关 /// <summary> /// 从json中读取数据 /// </summary> /// <param name="json"></param> /// <returns></returns> List<SceneData> GetSceneDataListFromJson(string json) { List<SceneData> sceneDataList = new List<SceneData>(); List<string> sceneNameList = GetValueListFromJson(json, "sceneName"); List<string> snList = GetValueListFromJson(json, "sn"); List<string> timeList = GetValueListFromJson(json, "time"); List<string> posDataList = GetValueListFromJson(json, "posList"); if (sceneNameList.Count * 4 != (sceneNameList.Count + snList.Count + timeList.Count + posDataList.Count)) { Debug.LogError("json解析各属性数目不符!"); return null; } for (int i = 0; i < sceneNameList.Count; i++) { SceneData sceneData = new SceneData(); sceneData.sceneName = sceneNameList[i]; sceneData.sn = int.Parse(snList[i]); sceneData.time = int.Parse(timeList[i]); string posListStr = posDataList[i]; List<Vector2> posList = new List<Vector2>(); string[] coordArr = posListStr.Split(','); for (int m = 0; m < coordArr.Length; m++) { string[] coord = coordArr[m].Split('_'); float x = float.Parse(coord[0]); float y = float.Parse(coord[1]); posList.Add(new Vector2(x, y)); } sceneData.posList = posList; sceneDataList.Add(sceneData); } return sceneDataList; } List<string> GetValueListFromJson(string json, string valueName) { List<string> valueList = new List<string>(); while (true) { int endIndex = json.Length - 1; string valueStr = GetFirstValueFromJson(json, valueName, out endIndex); if (valueStr == null) { break; } valueList.Add(valueStr); json = json.Substring(endIndex); } if (valueList.Count == 0) { Debug.LogError("can't find the " + valueName + " from json!"); } return valueList; } string GetFirstValueFromJson(string json, string valueName, out int endIndex) { int beginIndex = json.IndexOf(valueName); if (beginIndex == -1) { endIndex = json.Length - 1; return null; } endIndex = json.IndexOf(',', beginIndex); int preLength = valueName.Length + 2; string goalStr = json.Substring(beginIndex, endIndex - beginIndex); if (goalStr.Contains("["))//如果包含数组 { endIndex = json.IndexOf("]") + 1; goalStr = json.Substring(beginIndex, endIndex - beginIndex); } goalStr = goalStr.Substring(preLength, goalStr.Length - preLength); goalStr = goalStr.Replace("\"", ""); goalStr = goalStr.Replace("[", ""); goalStr = goalStr.Replace("]", ""); return goalStr; } #endregion