在c#中怎么样将json里的值提取出来根据键名首字母把键值进行排序

.Net技术 码拜 8年前 (2017-04-28) 2806次浏览
本人需要接收一段不知道内容的json,然后提取出里面的键值,通过这几天的查询,本人知道了可以用SortedDictionary来把json排序,
但是本人要接收的json里有数组或是嵌套json,例如:
{
“data”: [
{
“a”: “123”,
“cb”: “2323”,
“ab”: “asdf”
}
],
“acd”: “11”,
“bc”: “22”,
“ca”: {
“key”: “acce”,
“get”: “uc”
}
}
本人需要先把data和ca里面的值按照首字母排序,然后在把排好序的data,ca和acd,bc,进行排序(事先不知道键名),请教各位高手本人该怎么做呢?
解决方案

5

嵌套的也是一样排序。找个功能强大点的脚本分析器。

15

本人刚试了试。先把底层的需要排序的排好。然后把第一层的排序排好。都是用Dictionary<string,string>。然后把第一层的相应的内容替换成底层的内容。最后转成json串就可以了。
排序本人就用的orderBy(Item=>item.key)

80

{
  "BankCard": {
    "cardNo": null,
    "cvv2": null,
    "expiryDate": null,
    "idNo": null,
    "mobileNo": null,
    "name": null
  },
  "callback": "https://www.baidu.com",
  "Card": "",
  "cashier": "",
  "hmac": null,
  "Ip": "",
  "merchant": "123456",
  "notify": "https://www.baidu.com",
  "orderAmount": "",
  "orderCurrency": "CNY",
  "payer": {
    "bankCardNum": null,
    "email": "cc@cc.com",
    "idNum": "",
    "name": "付款人姓名",
    "nationality": null,
    "phoneNum": "13901234567",
    "type": "IDCARD"
  },
  "paymentModeCode": "",
  "productDetails": [
    {
      "amount": 30000,
      "description": "苹果6",
      "name": "Iphone 6",
      "quantity": 5,
      "receiver": ""
    }
  ],
  "remark": "备注",
  "requestId": "1474074837",
  "time": "",
  "Use": "",
  "UserId": ""
}
        static void Main(string[] args)
        {
            var s = File.ReadAllText("d9.txt", Encoding.Default); //数据放在文件里了,不然太多的转义眼都看花了
            var a = JObject.Parse(s);
            var b = a.GetEnumerator();
            var target = KeySort(a);
            s = JsonConvert.SerializeObject(target, Formatting.Indented);
            Console.WriteLine(s);
        }
        static SortedDictionary<string, object> KeySort(JObject obj)
        {
            var res = new SortedDictionary<string, object>();
            foreach (var x in obj)
            {
                if (x.Value is JValue) res.Add(x.Key, x.Value);
                else if (x.Value is JObject) res.Add(x.Key, KeySort((JObject)x.Value));
                else if(x.Value is JArray) 
                {
                    var tmp = new SortedDictionary<string, object>[x.Value.Count()];
                    for (var i = 0; i < x.Value.Count(); i++)
                    {
                        tmp[i] = KeySort((JObject)x.Value[i]);
                    }
                    res.Add(x.Key, tmp);
                }
            }
            return res;
        }

不过应该说明的是,排序 json 的键名是没有意义的。原因是你是按键名操作,而不是按顺序。
js 的对象的成员是按哈希表组织的,json 转换成 js 对象后,并不一定按字母顺序排列


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明在c#中怎么样将json里的值提取出来根据键名首字母把键值进行排序
喜欢 (0)
[1034331897@qq.com]
分享 (0)