• C# json 嵌套 排序 生成签名


    • json排序并取值
     1         static void Main(string[] args)
     2         {            
     3             var jsonStr = "json字符串";
     4             var jo = JObject.Parse(jsonStr);
     5             //var target = KeySort(jo);//排序
     6             var s = string.Join("", GetValue(jo));
     7             Console.WriteLine(s);
     8             Console.Read();
     9         }
    10 
    11         /// <summary>
    12         /// json 排序并取值
    13         /// </summary>
    14         /// <param name="jo">JObject</param>
    15         /// <returns></returns>
    16         static List<string> GetValue(object jo)
    17         {
    18             var res = new List<string>();
    19             var sd = new SortedDictionary<string, object>();
    20             switch (jo.GetType().Name)
    21             {
    22                 case "JValue":
    23                     res.Add(string.Format("{0}", (jo as JValue).Value));
    24                     break;
    25                 case "JObject":
    26                     foreach (var x in jo as JObject)
    27                     {
    28                         sd.Add(x.Key, x.Value);
    29                     }
    30                     foreach (var x in sd)
    31                     {
    32                         res.Add(x.Key);//只取排序后的值需注释掉
    33                         res.AddRange(GetValue(x.Value));
    34                     }
    35                     break;
    36                 case "JArray":
    37                     foreach (var x in jo as JArray)
    38                     {
    39                         res.AddRange(GetValue(x));
    40                     }
    41                     break;
    42             }
    43             return res;
    44         }
    45 
    46         /// <summary>
    47         /// json 排序
    48         /// </summary>
    49         /// <param name="jo">JObject</param>
    50         /// <returns></returns>
    51         static SortedDictionary<string, object> KeySort(JObject obj)
    52         {
    53             var res = new SortedDictionary<string, object>();
    54             foreach (var x in obj)
    55             {
    56                 if (x.Value is JValue) res.Add(x.Key, x.Value);
    57                 else if (x.Value is JObject) res.Add(x.Key, KeySort((JObject)x.Value));
    58                 else if (x.Value is JArray)
    59                 {
    60                     var tmp = new SortedDictionary<string, object>[x.Value.Count()];
    61                     for (var i = 0; i < x.Value.Count(); i++)
    62                     {
    63                         tmp[i] = KeySort((JObject)x.Value[i]);
    64                     }
    65                     res.Add(x.Key, tmp);
    66                 }
    67             }
    68             return res;
    69         }
  • 相关阅读:
    面试题1:赋值运算符函数
    面试题:寻找热门查询
    面试题9:斐波那契数列
    Java中的volatile关键字
    二分查找算法
    面试题8:旋转数组的最小数字
    面试题:在O(1)空间复杂度范围内对一个数组中前后连段有序数组进行归并排序
    百度面试题:从海量日志中提取访问百度次数最多的IP
    面试总结
    java垃圾回收
  • 原文地址:https://www.cnblogs.com/gygang/p/9388443.html
Copyright © 2020-2023  润新知