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

JSON数据Key排序的更多相关文章

  1. 对json数据key进行替换

    原文:https://blog.csdn.net/qq_39750658/article/details/83411897 import java.util.HashMap; import java. ...

  2. jquery Nestable 获取改变排序后的json数据 拖动排序

    <script type="text/javascript"> jQuery(function($){ $('.dd').nestable(); $('.dd-hand ...

  3. 对json数据进行排序

    项目有这样一个需要对数据库取出的数据按sort字段进行显示:这个时候想起来在JS中对json数据进行一个排序再进行数据填充可以实现此效果 var colId = "sort";// ...

  4. JavaScript对JSON数据进行排序

    var ajson= { "result":[ { "cid":1, "name":"aaa", "price ...

  5. js对JSON数据排序

    一.适用于数字排序和字幕排序json 的排序方法有很多种,这是其中最简单的一种方法. 代码如下: var sortBy = function (filed, rev, primer) {    rev ...

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

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  7. 把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进)

    #把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进) ##背景 项目中经常需要把JSON数据填充到页面表单,一开始我使用easyui自带的form load方法,觉得效率很低,经 ...

  8. 读取不标准的JSON数据

    正常的JSON数据 [      {"key":"UI","value":"UII"},      {"key ...

  9. Gson如何解析key值是数字的json数据

    1.使用注解@SerializedName来解决这个问题 2.比如有如下json数据:(key值是数字"1112") { "1112": "抖音&qu ...

随机推荐

  1. Java枚举类"全方位"

    作为一种长度固定,数据未定的一种存储数据集的数据类型,枚举类有如下方法可供参考. 普通类型的枚举类的创建 protected enum ColorEnum{ red,orange,yellow,gre ...

  2. STL:vector容器用法详解

    vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着ve ...

  3. 【一天一道LeetCode】#73. Set Matrix Zeroes

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  4. ReactJs和React Native的那些事

    介绍 1,React Js的目的 是为了使前端的V层更具组件化,能更好的复用,它能够使用简单的html标签创建更多的自定义组件标签,内部绑定事件,同时可以让你从操作dom中解脱出来,只需要操作数据就会 ...

  5. Django介绍、安装配置、基本使用、Django用户注册例子

    Django介绍     Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站     DjangoMTV的思想         没有controller ...

  6. OC语言(七)Block复习

    看下面一道Block的面试题: int i = 10; void(^myBlock)() = ^{ NSLog(@"%d",i); }; i = 100; myBlock(); 经 ...

  7. python的IndentationError: unexpected indent python

    都知道python是对格式要求很严格的,写了一些python但是也没发现他严格在哪里,今天遇到了IndentationError: unexpected indent错误我才知道他是多么的严格.    ...

  8. 怎样将Android手机弄死机?

    将Android手机弄死机目前知道有两种方式: 第一种: 以root权限在shell中执行 stop 通过 start 但是这种串口还是可以用 第二种: suecho "c" &g ...

  9. Mahout系列之----共轭梯度预处理

    对于大型矩阵,预处理是很重要的.常用的预处理方法有: (1) 雅克比预处理 (2)块状雅克比预处理 (3)半LU 分解 (4)超松弛法

  10. nginx 编译增加新的模块

    原已经安装好的nginx,现在需要添加一个未被编译安装的模块: nginx -V 可以查看原来编译时都带了哪些参数 原来的参数:--prefix=/app/nginx 添加的参数: --with-ht ...