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排序
- Map按照key和value進行排序排序
- 用c#進行快速排序C#排序
- Linux中ls對檔案進行按大小排序和按時間排序Linux排序
- 多維陣列按鍵名進行重新排序陣列排序
- PHP 多維陣列排序-按某個 key 的值PHP陣列排序
- layui資料表格初始化時按某列進行排序UI排序
- C#按字串中的數字排序問題C#字串排序
- C#程式碼實現對HTTP POST引數進行排序C#HTTP排序
- 如何按最後修改時間對 ls 命令的輸出進行排序排序
- 對字典進行排序排序
- C# 中使用Linq和Lambda表示式對List進行排序C#排序
- json keyname mapJSON
- 將Json載入到.NET物件並對結果進行過濾和排序JSON物件排序
- 使用 Swift 進行 JSON 解析SwiftJSON
- Python對字典進行排序Python排序
- 陣列進行排序的方法陣列排序
- 對N個數進行排序排序
- java對中文(拼音)進行排序Java排序
- 在ListCtrl中進行排序 (轉)排序
- java map存取重複值、幼兒園分班問題、map按key自動排序問題Java排序
- json格式keyCode表JSON
- jQuery按鍵響應事件keypress對應的按鍵編碼keycodejQuery事件
- 使用Flash進行JSON CSRF攻擊JSON
- 在命令列用 sort 進行排序命令列排序
- 使用索引掃描來進行排序索引排序
- apisix~按域名進行請求轉發API
- C#操作jsonC#JSON
- 使用@ResponseBody物件轉json和@RequestBody進行json轉物件案例物件JSON
- 力扣之按身高排序力扣排序
- python 對字典的值進行排序Python排序
- JavaScript 根據物件鍵值進行排序JavaScript物件排序
- 一個命令對文字進行高效排序排序
- 「Js」物件按照鍵名來進行排序JS物件排序
- ORDER對查詢結果進行排序排序
- 根據陣列中物件進行排序陣列物件排序
- mysql按照漢字拼音進行order by排序MySql排序