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

 

posted @ 2018-07-06 21:27  露夕逝  阅读(157)  评论(0编辑  收藏  举报