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内容如下图片:
使用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; }
}
}
运行结果:
更多LINQ的知识,请参考我正在写的《LINQ教程》: