如何在c#中按ID对JSON数据进行分组



从数据表中序列化数据后获得这种格式的JSON

这是读取excel文件并将数据存储在数据表中的结果。后来使用newtosoft序列化。在json输出

JSON现在如下:

[{ "Id": "1", "Profit": "33.332999999999998", "Telephone": "123", "Email": "user1@testmail.com" }, { "Id": "1", "Profit": "21.21", "Telephone": "43", "Email": "user11@testmail.com" }, { "Id": "2", "Profit": "49.000999999999998", "Telephone": "22", "Email": "user2@testmail.com" }, { "Id": "2", "Profit": "10.1", "Telephone": "876", "Email": "user22@testmail.com" }]
<<p>预期格式/strong>
[{ "Id": "1", "Profits": ["33.332999999999998", "21.21"], "Telephones": ["43", "123"], "Emails": ["user1@testmail.com", "user11@testmail.com"] }, { "Id": "2", "Profits": ["49.000999999999998", "10.1"], "Telephones": ["876", "22"], "Emails": ["user2@testmail.com", "user22@testmail.com"] }]
有谁能帮帮忙吗?

try this

var json=...origin json
var jD = JsonConvert.DeserializeObject<DataOrigin[]>(json);
jD=jD.OrderBy(d => d.Id).ToArray();
var prevId=string.Empty;
var list=new List<Data>();
foreach (var item in jD)
{

if(item.Id!=prevId)
{
prevId=item.Id;
list.Add(new Data(Convert.ToInt32(item.Id), item.Profit, item.Telephone, item.Email));
}
else
{
var prevIdInt=Convert.ToInt32(prevId);
var prevItem=list.Last(l =>l.Id==prevIdInt );
prevItem.MergeItem(item.Profit,item.Telephone,item.Email);
}
}
var result =  JsonConvert.SerializeObject(list);

结果

[
{
"Id": 1,
"Profits": [
33.333,
21.21
],
"Telephones": [
"123",
"43"
],
"Emails": [
"user1@testmail.com",
"user11@testmail.com"
]
},
{
"Id": 2,
"Profits": [
49.001,
10.1
],
"Telephones": [
"22",
"876"
],
"Emails": [
"user2@testmail.com",
"user22@testmail.com"
]
}
]

public class DataOrigin
{
public string Id { get; set; }
public double Profit { get; set; }
public string Telephone { get; set; }
public string Email { get; set; }
}
public class Data
{
public int Id { get; set; }
public  List<double> Profits { get; set; }
public List<string> Telephones { get; set; }
public List<string> Emails { get; set; }

public Data(int id,double profit,string phone, string email)
{  
Id=id;
Profits = new List<double>(){profit};
Telephones = new List<string>(){phone};
Emails = new List<string>(){email};

}
public void MergeItem (double profit,string phone, string email)
{
Profits.Add(profit);
Telephones.Add(phone);
Emails.Add(email);
}
}

解决方案如下:

var data = [{"Id":"1","利润":"33.332999999999998","电话":"123","电子邮件":"user1@testmail.com"}, {"Id":"1","利润":"21.21","电话":"43","电子邮件":"user11@testmail.com"}, {"Id":"2","利润":"49.000999999999998","电话":"22","电子邮件":"user2@testmail.com"}, {"Id":"2","利润":"10.1","电话":"876","电子邮件":"user22@testmail.com"})Var temp = {};数据。forEach(x => {如果(临时[x。Id] ==未定义){临时[x。Id] = {}临时[x。Id]['Id'] = x临时[x。Id]['Profit'] = []临时[x。Id]['Telephone'] = []临时[x。Id]['Email'] = []}临时[x.Id] .Profit.push (x.Profit)临时[x.Id] .Telephone.push (x.Telephone)临时[x.Id] .Email.push (x.Email)}(var finalResponse = []for (const [key, value] of Object.entries(temp)) {finalResponse.push(值)}

最新更新