json转hashtable

2021-05-31  本文已影响0人  宗宣先生

        /// <summary>

        /// 处理json

        /// </summary>

        /// <param name="json">json字符串</param>

        /// <returns></returns>

        private Hashtable JsonToHashTable(string json)

        {

            Hashtable ht = new Hashtable();

            string jsonStr = json.Substring(1, json.Length - 2);//去掉首尾{}

            jsonStr = jsonStr.Replace("\"", "").Replace("'", "").Replace(" ", "");//去掉所有" '

            string[] jsonArr = SplitJson(jsonStr,",");

            string str = null;

            for (int i = 0; i < jsonArr.Length; i++)

            {

                str = jsonArr[i];

                string[] arr = SplitJson(str,":");

                //判断是否包含[ ]

                if (arr[1].Contains("["))//做数组处理

                {

                    List<Hashtable> subHtl = JsonToHashTableList(arr[1]);

                    ht.Add(arr[0], subHtl);

                }

                else if (arr[1].Contains("{"))//做json处理

                {

                    Hashtable subHt = JsonToHashTable(arr[1]);

                    ht.Add(arr[0], subHt);

                }

                else

                {

                    ht.Add(arr[0], arr[1]);

                }

            }

            return ht;

        }

        /// <summary>

        /// 处理json数组

        /// </summary>

        /// <param name="json">json数组字符串</param>

        /// <returns></returns>

        private List<Hashtable> JsonToHashTableList(string json)

        {

            List<Hashtable> htl = new List<Hashtable>();

            string jsonStr = json.Substring(1, json.Length - 2);//去掉首尾[]

            string[] jsonArr = SplitJson(jsonStr,",");

            for (int j = 0; j < jsonArr.Length; j++)

            {

                Hashtable ht = JsonToHashTable(jsonArr[j]);

                htl.Add(ht);

            }

            return htl;

        }

        /// <summary>

        /// 依据传入的符号分割字符串

        /// </summary>

        /// <param name="json"></param>

        /// <param name="code">冒号则只分割一次,逗号无视[],{}中的逗号分割</param>

        /// <returns></returns>

        private string[] SplitJson(string json,string code)

        {

            List<string> res = new List<string>();

            if (code == ",")

            {

                //无视[],{}中的逗号分割

                string pattern = @"(?<=\{|\[.*),(?=.*\}|\])";

                string result = Regex.Replace(json, pattern, "####");//把[ ]和{ }中的逗号排除

                string[] arr = result.Split(',');

                string temp = null;

                for (int i = 0; i < arr.Length; i++)

                {

                    temp = arr[i].Replace("####", ",");//恢复[ ]和{ }中的逗号

                    res.Add(temp);

                }

            }

            else if(code == ":")

            {

                //冒号则只分割一次

                int index = json.IndexOf(code);

                res.Add(json.Substring(0, index));

                res.Add(json.Substring(index + 1, json.Length - index - 1));

            }

            return res.ToArray();

        }

上一篇 下一篇

猜你喜欢

热点阅读