m0_58015531 2022-04-01 12:34 采纳率: 100%
浏览 45
已结题

请问各位靓仔美女,C# JSON如何根据对象的几个值去重对象?有什么linq语句可以快捷去重吗?

JSON如下:

{

"dt": 123,

"result": {

"rr": 29,

"aa": 12,

"data": [

{

"num": "121",

"ser": "067",

"name": "小明",

"num1": 53,

"num2": 28

},

{

"num": "230",

"ser": "712",

"name": "小张",

"num1": 52,

"num2": 35

},

{

"num": "121",

"ser": "556",

"name": "小明",

"num1": 53,

"num2": null

}

]

}

}

压缩的JSON:
string json="{"dt":123,"result":{"rr":29,"aa":12,"data":[{"num":"121","ser":"067","name":"小明","num1":53,"num2":28},{"num":"230","ser":"712","name":"小张","num1":52,"num2":35},{"num":"121","ser":"556","name":"小明","num1":53,"num2":null}]}}";
JObject job = JObject.Parse(json);
使用Newtonsoft
希望根据对象几个相同的值(num值:121、name值:小明、num1值:53)条件,多条件去重得到的结果如下:
{

"dt": 123,

"result": {

"rr": 29,

"aa": 12,

"data": [

{

"num": "121",

"ser": "067",

"name": "小明",

"num1": 53,

"num2": 28

},

{

"num": "230",

"ser": "712",

"name": "小张",

"num1": 52,

"num2": 35

}

]

}

}

为去重的JSON与多条件去重对象后的JSON内容如下图片:

img

img

  • 写回答

1条回答 默认 最新

  • 码老头 2022-04-01 13:59
    关注

    使用Newtonsoft.Json反序列化,然后使用LINQ的GroupBy进行分组即可,示例代码如下:

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace ConsoleApp2
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                var json = "{\"dt\":123,\"result\":{\"rr\":29,\"aa\":12,\"data\":[{\"num\":\"121\",\"ser\":\"067\",\"name\":\"小明\",\"num1\":53,\"num2\":28},{\"num\":\"230\",\"ser\":\"712\",\"name\":\"小张\",\"num1\":52,\"num2\":35},{\"num\":\"121\",\"ser\":\"556\",\"name\":\"小明\",\"num1\":53,\"num2\":null}]}}";
                var response = JsonConvert.DeserializeObject<Response>(json);
                var result = response.result.data.GroupBy(g => new
                {
                    g.name,
                    g.num,
                    g.num1
                }).Select(x => x.FirstOrDefault()).ToList();
                Console.WriteLine(JsonConvert.SerializeObject(result));
                Console.ReadKey();
            }
        }
    
        public class Datum
        {
            public string num { get; set; }
            public string ser { get; set; }
            public string name { get; set; }
            public int num1 { get; set; }
            public int? num2 { get; set; }
        }
    
        public class Result
        {
            public int rr { get; set; }
            public int aa { get; set; }
            public List<Datum> data { get; set; }
        }
    
        public class Response
        {
            public int dt { get; set; }
            public Result result { get; set; }
        }
    }
    

    运行结果:

    img

    更多LINQ的知识,请参考我正在写的《LINQ教程》:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月5日
  • 已采纳回答 4月1日
  • 修改了问题 4月1日
  • 创建了问题 4月1日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!