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;
        }
时间: 2024-08-19 06:23:12

JSON数据Key排序的相关文章

对json数据进行排序

项目有这样一个需要对数据库取出的数据按sort字段进行显示:这个时候想起来在JS中对json数据进行一个排序再进行数据填充可以实现此效果 1 var colId = "sort";//json排序字段 2 //对json进行降序排序函数 3 var desc = function(x,y){ 4 return (x[colId] < y[colId]) ? 1 : -1 5 } 6 //对json进行升序排序函数 7 var asc = function(x,y){ 8 retu

Js实现根据某个字段对Json数据进行排序

一.  知识准备: js中内置的 sort() 方法 (如果你对此方法已经很了解,请跳过此节) 此方法默认是按字母顺序对数组中的元素进行排序的,说得更精确点,是按照字符编码的顺序进行排序. 看如下例子: 当数组中元素为 数字类型 时,排序结果与我们设想的完全不同,因为默认是按照字符编码的顺序进行排序的. 解决方案:sort() 方法接收一个可选参数(此参数必须是函数),我们可以自己定义排序规则,如下图 二.  对 json 排序的具体实现 /* * @description 根据某个字段实现对j

js使用sort将JSON数据进行排序

在把数据通过Echarts展示成统计图模式时,柱状统计图需要将数据进行从大到小来排序! 下面为所需要的数据: 1 { 2 mapData: [ 3 {name: '北京',value: '555'}, 4 {name: '天津',value: '1000'}, 5 {name: '上海',value: '100'}, 6 {name: '重庆',value: '100'}, 7 {name: '河北',value: '600'}, 8 {name: '河南',value: '400'}, 9 {

我的Android进阶之旅------&gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

javascript通过json数据按格式生成一个按字母分类排序的分类信息表

效果图如下 1.json数据格式 var _people=[{name:'朱瑞',url:'aaaaaa',nick:'zhu'},{name:'刘桂清',url:'aaaaa',nick:'liu'}];这里按姓氏排序借用了nick,不用nick的话,需要加载一个汉字拼音对照数组,判断匹配 2.javascript代码 1 (function ($){ 2 function SortByGroup(arr,option){ 3 this.option=option; 4 this.arr=ar

获取json数据中所有key集合

/** * 获取json数据中所有key */ function fetchResponseInfo(responseInfo){ //判断是否为空 if((!responseInfo || responseInfo.length <= 0)) { return; } //获取model var jsonCon = jQuery.parseJSON(responseInfo).model; if(!jsonCon){ return; } //获取所有key var keyArr; if(json

java 中json数据的一些处理

JSONObject   的相关处理 //-------------遍历json串的key----------- JSONObject data = JSONObject.fromObject("{\"cill\":\"2\",\"age\":\"黄磊\"}"); Iterator keys = data.keys(); ArrayList<String> listKey = new Array

jq处理JSON数据

jq 允许你直接在命令行下对 JSON 进行操作,包括分片.过滤.转换等等.让我们通过几个例子来说明 jq 的功能:一.输出格式化,漂亮的打印效果如果我们用文本编辑器打开 JSON,有时候可能看起来会一团糟,但是通过 jq 的 .(点)过滤器就可以立马让 JSON 的格式规整起来.1.用文本编辑器打开后的样子 2.用 jq 显示的结果 复制代码 代码如下: % jq . soundtag.json 二.快速查询JSON数据利用 jq 能够以 key 作为关键字来对 JSON 作出快速查询, 例如

笔记 python与json数据

json数据的编码解码 编码:json.dumps() 解码:json.loads() json的人文关怀 1,数据排序:sort_keys=True/False(默认) 2,缩进显示:indent=x(空格数) 3,如果是用于网络传输,如表单提交等,则数据量越小越好, 所以删除空白很有必要:separators=(',', ':')数据一般是用逗号和冒号进行分隔 4,dict对象的key如果不是string对象,编码过程中会发生异常, 可以使用skipkeys=True/False(默认)来跳