C# JSON按key進行排序
一次在呼叫百度外賣的介面中需要對JSON
取MD5
,但是前提是JSON
必須先排序
1.需要用到的庫 JSON.NET
以下是原始碼
/// <summary>
/// JSON物件名稱排序
/// </summary>
public class JsonSort
{
/// <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;
//list.Sort((p1, p2) => JProperty.Load(p1.CreateReader()).Name.GetAnsi() - JProperty.Load(p2.CreateReader()).Name.GetAnsi());
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)
{
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;
// listToken.Sort((p1, p2) => JProperty.Load(p1.CreateReader()).Name.GetAnsi() - JProperty.Load(p2.CreateReader()).Name.GetAnsi());
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.None);
return ret;
}
}
附上原始碼下載地址:
http://pan.baidu.com/s/1eQLVqUY 密碼:nc8w
c#
對JSON
字串排序(KEY/VALUE)
public string StortJson(string json)
{
var dic = JsonConvert.DeserializeObject<SortedDictionary<string, object>>(json);
SortedDictionary<string, object> keyValues = new SortedDictionary<string, object>(dic);
keyValues.OrderBy(m => m.Key);//升序 把Key換成Value 就是對Value進行排序
//keyValues.OrderByDescending(m => m.Key);//降序
return JsonConvert.SerializeObject(keyValues);
}
需要新增的引用:
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
相關文章
- c# 對JSON字串排序(KEY/VALUE)C#JSON字串排序
- perl的hash轉json後按key排序JSON排序
- 多維陣列按鍵名進行重新排序陣列排序
- PHP 多維陣列排序-按某個 key 的值PHP陣列排序
- layui資料表格初始化時按某列進行排序UI排序
- C# 中使用Linq和Lambda表示式對List進行排序C#排序
- 對字典進行排序排序
- 將Json載入到.NET物件並對結果進行過濾和排序JSON物件排序
- Python對字典進行排序Python排序
- C#操作jsonC#JSON
- 陣列進行排序的方法陣列排序
- java map存取重複值、幼兒園分班問題、map按key自動排序問題Java排序
- 使用@ResponseBody物件轉json和@RequestBody進行json轉物件案例物件JSON
- [C#] CHO.Json操作Json資料C#JSON
- kafka指定key進行分割槽遇到的問題Kafka
- go 處理 jsonArray 無 key 的 JSON 串GoJSON
- 在命令列用 sort 進行排序命令列排序
- python 對字典的值進行排序Python排序
- 使用cJSON庫對JSON格式進行解析JSON
- .net 對JSON資料排序JSON排序
- N個人,按M進行分組
- apisix~按域名進行請求轉發API
- 力扣之按身高排序力扣排序
- C# 選擇排序C#排序
- c# 陣列排序C#陣列排序
- Laravel 如何監聽 Redis key 過期進行回撥LaravelRedis
- 介面測試之 json 中的 key 獲取JSON
- 介面測試之json中的key獲取JSON
- Json中使用中文作為key的風險JSON
- 在C#中使用Json.Net進行序列化和反序列化及定製化C#JSON
- python-進階教程-使用物件屬性進行排序Python物件排序
- JavaScript 根據物件鍵值進行排序JavaScript物件排序
- 一個命令對文字進行高效排序排序
- 「Js」物件按照鍵名來進行排序JS物件排序
- ORDER對查詢結果進行排序排序
- 利用compareTo方法進行字串比較排序字串排序
- C#解析JSON字串總結C#JSON字串
- C#中JSON轉換類C#JSON