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;
}
JSON数据Key排序的更多相关文章
- 对json数据key进行替换
原文:https://blog.csdn.net/qq_39750658/article/details/83411897 import java.util.HashMap; import java. ...
- jquery Nestable 获取改变排序后的json数据 拖动排序
<script type="text/javascript"> jQuery(function($){ $('.dd').nestable(); $('.dd-hand ...
- 对json数据进行排序
项目有这样一个需要对数据库取出的数据按sort字段进行显示:这个时候想起来在JS中对json数据进行一个排序再进行数据填充可以实现此效果 var colId = "sort";// ...
- JavaScript对JSON数据进行排序
var ajson= { "result":[ { "cid":1, "name":"aaa", "price ...
- js对JSON数据排序
一.适用于数字排序和字幕排序json 的排序方法有很多种,这是其中最简单的一种方法. 代码如下: var sortBy = function (filed, rev, primer) { rev ...
- 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题
1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...
- 把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进)
#把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进) ##背景 项目中经常需要把JSON数据填充到页面表单,一开始我使用easyui自带的form load方法,觉得效率很低,经 ...
- 读取不标准的JSON数据
正常的JSON数据 [ {"key":"UI","value":"UII"}, {"key ...
- Gson如何解析key值是数字的json数据
1.使用注解@SerializedName来解决这个问题 2.比如有如下json数据:(key值是数字"1112") { "1112": "抖音&qu ...
随机推荐
- CodePen最佳实例分享
原文地址: Chris Coyier's Favorite CodePen Demos 原文日期: 2013年8月13日 翻译日期: 2013年8月21日 CodePen: Build, Explor ...
- sublime test2 快捷键
快捷键比较全的:http://blog.useasp.net/archive/2013/06/14/sublime-text-2-all-default-Shortcuts-table-on-wind ...
- 03_Android项目中读写文本文件的代码
编写一下Android界面的项目 使用默认的Android清单文件 <?xml version="1.0" encoding="utf-8"?> & ...
- Linux下触摸屏驱动程序分析
[摘要: 本文以linux3.5--Exynos4412仄台,剖析触摸屏驱动焦点内容.Linux下触摸屏驱动(以ft5x06_ts为例)须要懂得以下学问: 1. I2C协定 2. Exynos4412 ...
- 开源视频平台:MediaCore(MediaDrop)
MediaCore 是一个多媒体的建站系统,主要的功能包括视频.音频.YouTube集成.播客和 iTunes RSS 生成,用户可以提交各种多媒体内容. <开源中国>网站上说它是一个开源 ...
- AWR報告詳解
AWR是Oracle 10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动负载信息库, AWR 是通过对比两次快照(snapshot)收集到的统计信息 ...
- 如何让你的传输更安全——NIO模式和BIO模式实现SSL协议通信
对于SSL/TLS协议,如果要每个开发者都自己去实现显然会带来不必要的麻烦,正是为了解决这个问题Java为广大开发者提供了Java安全套接字扩展--JSSE,它包含了实现Internet安全通信的一系 ...
- AngularJS进阶(二)AngularJS路由问题解决
AngularJS路由问题解决 遇到了一个棘手的问题:点击优惠详情时总是跳转到药店详情页面中去.再加一层地址解决了,但是后来发现问题还是来了: Could not resolve 'yhDtlMain ...
- Java-HttpServlet
/** * * Provides an abstract class to be subclassed to create * an HTTP servlet suitable for a Web s ...
- ExtJS:Grid数据导出至excel实例
导出函数ExportExcel() var config={ store: alldataStore, title: '测试标题' }; var tab=tabPanel.getActiveTab() ...