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;
        }

 

转载于:https://www.cnblogs.com/wt-vip/p/7268607.html

### JavaScript 对 JSONKey 排序的实现方法 在 JavaScript 中,JSON 并没有直接提供对对象按 key 排序的功能。然而,可以通过将 JSONkey 提取到数组中,对数组进行排序,再根据排序后的 key 重新构造 JSON 对象来实现这一需求[^1]。 以下是基于引用内容和常见实现方式的一种代码示例: ```javascript function jsonSortByKey(jsonObj) { const keys = Object.keys(jsonObj); // 获取所有 key keys.sort(); // 对 key 进行排序 const sortedJson = {}; for (const key of keys) { sortedJson[key] = jsonObj[key]; // 根据排序后的 key 构造新的对象 } return sortedJson; } // 示例用法 const jsonData = { "pull": "0", "time_stamp": "1584609167", "b": "2", "a": "1", "nonce_str": "b2Mc2cihAmQyT6QHHQEw" }; const sortedJsonData = jsonSortByKey(jsonData); console.log(sortedJsonData); ``` 上述代码通过 `Object.keys()` 方法获取 JSON 对象的所有 key,并使用 `Array.prototype.sort()` 方法对其进行排序。随后,按照排序后的 key 顺序,重新构造一个新的 JSON 对象。 此外,如果需要将排序后的 JSON 转换为字符串形式,可以结合 `JSON.stringify()` 方法[^2]: ```javascript function jsonSortAndStringify(jsonObj) { const keys = Object.keys(jsonObj).sort(); // 获取并排序 key const sortedJson = {}; for (const key of keys) { sortedJson[key] = jsonObj[key]; } return JSON.stringify(sortedJson, null, 4); // 格式化输出 } // 示例用法 const jsonData = { "pull": "0", "time_stamp": "1584609167", "b": "2", "a": "1", "nonce_str": "b2Mc2cihAmQyT6QHHQEw" }; const sortedJsonString = jsonSortAndStringify(jsonData); console.log(sortedJsonString); ``` 这种方法不仅实现了对 JSONkey 排序的需求,还提供了格式化的字符串输出功能。 ### 注意事项 - JSON 对象本质上是一个无序的数据结构,因此排序仅适用于特定场景下的展示或处理需求。 - 如果 JSON 数据较为复杂(如嵌套对象或数组),需递归处理以确保所有层级的 key 都被正确排序[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值