惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
WordPress大学
WordPress大学
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
MyScale Blog
MyScale Blog
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
P
Proofpoint News Feed
D
DataBreaches.Net

博客园 - UnseenstoneX

《打砖块创作家》隐私政策 打砖块创作家《小游戏隐私保护指引》 python 常用数据结构 Python 基本语法 地形遇到几个问题 TArray数组 UE问题分部解决 UE寻找Actor UE对话框 ShadowCaster 代码 C#读写csv文件 优化相关 unity 打开文件夹并鼠标选中某文件 C# winform中 选择文件和保存文件 Unity与Android交互实现 一个将数据均匀分段1,2,5的随写 C# 持续序列化对象追加到文件的方法 读写文件 C#二进制序列化和反序列化
Json解析
UnseenstoneX · 2018-07-06 · via 博客园 - UnseenstoneX
 #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