zoukankan      html  css  js  c++  java
  • JSON数据Key排序

        /// <summary>
           /// JSON格式化重新排序
           /// </summary>
           /// <param name="jobj">原始JSON JToken.Parse(string json);</param>
           /// <param name="obj">初始值Null</param>
           /// <returns></returns>
           public static string SortJson(JToken jobj, JToken obj)
            {
                if (obj == null)
                {
                    obj = new JObject();
                }
                List<JToken> list = jobj.ToList<JToken>();
                if (jobj.Type == JTokenType.Object)//非数组
                {
                    List<string> listsort = new List<string>();
                    foreach (var item in list)
                    {
                       string name= JProperty.Load(item.CreateReader()).Name;
                       listsort.Add(name);
                    }
                    listsort.Sort();
                    List<JToken> listTemp = new List<JToken>();
                    foreach (var item in listsort)
                    {
                        listTemp.Add(list.Where(p=>JProperty.Load(p.CreateReader()).Name==item).FirstOrDefault());
                    }
                    list = listTemp;
                    foreach (var item in list)
                    {
                        JProperty jp = JProperty.Load(item.CreateReader());
                        if (item.First.Type == JTokenType.Object)
                        {
                            JObject sub = new JObject();
                            (obj as JObject).Add(jp.Name, sub);
                            SortJson(item.First, sub);
                        }
                        else if (item.First.Type == JTokenType.Array)
                        {
                            JArray arr = new JArray();
                            if (obj.Type == JTokenType.Object)
                            {
                                (obj as JObject).Add(jp.Name, arr);
                            }
                            else if (obj.Type == JTokenType.Array)
                            {
                                (obj as JArray).Add(arr);
                            }
                            SortJson(item.First, arr);
                        }
                        else if (item.First.Type != JTokenType.Object && item.First.Type != JTokenType.Array)
                        {
                            (obj as JObject).Add(jp.Name, item.First);
                        }
                    }
                }
                else if (jobj.Type == JTokenType.Array)//数组
                {
                    foreach (var item in list)
                    {
                        List<JToken> listToken = item.ToList<JToken>();
                        List<string> listsort = new List<string>();
                        foreach (var im in listToken)
                        {
                            if (im.Type == JTokenType.Object)
                            {
                     
                                    JObject sub = new JObject();
                                    (obj as JArray).Add(sub);
                                    SortJson(im, sub);
                            }
                            else {
                                string name = JProperty.Load(im.CreateReader()).Name;
                                listsort.Add(name);
                            }
                        }
                        listsort.Sort();
                        List<JToken> listTemp = new List<JToken>();
                        foreach (var im2 in listsort)
                        {
                            listTemp.Add(listToken.Where(p => JProperty.Load(p.CreateReader()).Name == im2).FirstOrDefault());
                        }
                        list = listTemp;
    
                        listToken = list;
                        JObject item_obj = new JObject();
                        foreach (var token in listToken)
                        {
                            JProperty jp = JProperty.Load(token.CreateReader());
                            if (token.First.Type == JTokenType.Object)
                            {
                                JObject sub = new JObject();
                                (obj as JObject).Add(jp.Name, sub);
                                SortJson(token.First, sub);
                            }
                            else if (token.First.Type == JTokenType.Array)
                            {
                                JArray arr = new JArray();
                                if (obj.Type == JTokenType.Object)
                                {
                                    (obj as JObject).Add(jp.Name, arr);
                                }
                                else if (obj.Type == JTokenType.Array)
                                {
                                    (obj as JArray).Add(arr);
                                }
                                SortJson(token.First, arr);
                            }
                            else if (item.First.Type != JTokenType.Object && item.First.Type != JTokenType.Array)
                            {
                                if (obj.Type == JTokenType.Object)
                                {
                                    (obj as JObject).Add(jp.Name,token.First);
                                }
                                else if (obj.Type == JTokenType.Array)
                                {
                                    item_obj.Add(jp.Name, token.First);
                                }
                            }
                        }
                        if (obj.Type == JTokenType.Array)
                        {
                            (obj as JArray).Add(item_obj);
                        }
                    }
                }
                string ret = obj.ToString(Formatting.Indented);
                return ret;
            }
  • 相关阅读:
    Codeforces Round #359 (Div. 2) C. Robbers' watch 鸽巢+stl
    poj 3616 Milking Time dp
    UVA 11401
    UVA 11806 Cheerleaders dp+容斥
    Educational Codeforces Round 4 D. The Union of k-Segments 排序
    Codeforces Round #337 (Div. 2) C. Harmony Analysis 数学
    Codeforces Round #337 (Div. 2) B. Vika and Squares 水题
    Codeforces Round #337 (Div. 2) A. Pasha and Stick 水题
    POJ2402/UVA 12050 Palindrome Numbers 数学思维
    UVA 11076 Add Again 计算对答案的贡献+组合数学
  • 原文地址:https://www.cnblogs.com/wt-vip/p/7268607.html
Copyright © 2011-2022 走看看