C# 如何使用LINQ中的密钥对值从单个字段中提取重复数据?
这是我下面的JSONC# 如何使用LINQ中的密钥对值从单个字段中提取重复数据?,c#,json,linq,dictionary,json.net,C#,Json,Linq,Dictionary,Json.net,这是我下面的JSON { "status": "OK", "Response": [{ "id": 43, "Name": "name 1", "SubName": "Sub 1" "Link": "Link 1",
{
"status": "OK",
"Response": [{
"id": 43,
"Name": "name 1",
"SubName": "Sub 1"
"Link": "Link 1",
"Active": 1,
"Genre": 8,
"Description": "Description 1",
"Languages": "",
"IsDeleted": 0,
"GenreId": 8
},
{
"id": 44,
"Name": "name 1",
"SubName": "Sub 2"
"Link": "Link 2",
"Active": 1,
"Genre": 9,
"Description": "Description 2",
"Languages": "",
"IsDeleted": 0,
"GenreId": 9
},
{
"id": 45,
"Name": "name 1",
"SubName": "Sub 3"
"Link": "Link 3",
"Active": 1,
"Genre": 10,
"Description": "Description 3",
"Languages": "",
"IsDeleted": 0,
"GenreId": 10
},
{
"id": 46,
"Name": "name 2",
"SubName": ""
"Link": "Link 4",
"Active": 1,
"Genre": 11,
"Description": "Description 4",
"Languages": "",
"IsDeleted": 0,
"GenreId": 11
},
{
"id": 47,
"Name": "name 3",
"SubName": "Sub 1"
"Link": "Link 5",
"Active": 1,
"Genre": 12,
"Description": "Description 5",
"Languages": "",
"IsDeleted": 0,
"GenreId": 12
},
{
"id": 48,
"Name": "name 3",
"SubName": "Sub 2"
"Link": "Link 6",
"Active": 1,
"Genre": 13,
"Description": "Description 6",
"Languages": "",
"IsDeleted": 0,
"GenreId": 13
},
{
"id": 49,
"Name": "name 3",
"SubName": "Sub 3"
"Link": "Link 7",
"Active": 1,
"Genre": 14,
"Description": "Description 7",
"Languages": "",
"IsDeleted": 0,
"GenreId": 14
},
{
"id": 50,
"Name": "name 3",
"SubName": "Sub 4"
"Link": "Link 8",
"Active": 1,
"Genre": 15,
"Description": "Description 8",
"Languages": "",
"IsDeleted": 0,
"GenreId": 15
},
{
"id": 51,
"Name": "name 4",
"SubName": ""
"Link": "Link 9",
"Active": 1,
"Genre": 16,
"Description": "Description 9",
"Languages": "",
"IsDeleted": 0,
"GenreId": 16
}]
}
name 1.json
{
"rows": [{
"title": "Sub 1",
"items": [{
"id": 43,
"Name": "name 1",
"SubName": "Sub 1"
"Link": "Link 1",
"Active": 1,
"Genre": 8,
"Description": "Description 1",
"Languages": "",
"IsDeleted": 0,
"GenreId": 8
}]
},
{
"title": "Sub 2",
"items": [{
""id": 44,
"Name": "name 1",
"SubName": "Sub 2"
"Link": "Link 2",
"Active": 1,
"Genre": 9,
"Description": "Description 2",
"Languages": "",
"IsDeleted": 0,
"GenreId": 9
}]
},
{
"title": "Sub 3",
"items": [{
""id": 45,
"Name": "name 1",
"SubName": "Sub 3"
"Link": "Link 3",
"Active": 1,
"Genre": 10
"Description": "Description 3",
"Languages": "",
"IsDeleted": 0,
"GenreId": 10
}]
}
}]
}
name 3.json
{
"rows": [{
"title": "Sub 1",
"items": [{
"id": 47,
"Name": "name 3",
"SubName": "Sub 1"
"Link": "Link 5",
"Active": 1,
"Genre": 12,
"Description": "Description 5",
"Languages": "",
"IsDeleted": 0,
"GenreId": 12
}]
},
{
"title": "Sub 2",
"items": [{
""id": 48,
"Name": "name 3",
"SubName": "Sub 2"
"Link": "Link 6",
"Active": 1,
"Genre": 13,
"Description": "Description 6",
"Languages": "",
"IsDeleted": 0,
"GenreId": 13
}]
},
{
"title": "Sub 3",
"items": [{
""id": 49,
"Name": "name 3",
"SubName": "Sub 3"
"Link": "Link 7",
"Active": 1,
"Genre": 14
"Description": "Description 7",
"Languages": "",
"IsDeleted": 0,
"GenreId": 14
}]
},
{
"title": "Sub 4",
"items": [{
""id": 50,
"Name": "name 3",
"SubName": "Sub 4"
"Link": "Link 8",
"Active": 1,
"Genre": 15
"Description": "Description 8",
"Languages": "",
"IsDeleted": 0,
"GenreId": 15
}]
}
}]
}
我试着做如下的事情
{
"status": "OK",
"Response": [{
"id": 43,
"Name": "name 1",
"SubName": "Sub 1"
"Link": "Link 1",
"Active": 1,
"Genre": 8,
"Description": "Description 1",
"Languages": "",
"IsDeleted": 0,
"GenreId": 8
},
{
"id": 44,
"Name": "name 1",
"SubName": "Sub 2"
"Link": "Link 2",
"Active": 1,
"Genre": 9,
"Description": "Description 2",
"Languages": "",
"IsDeleted": 0,
"GenreId": 9
},
{
"id": 45,
"Name": "name 1",
"SubName": "Sub 3"
"Link": "Link 3",
"Active": 1,
"Genre": 10,
"Description": "Description 3",
"Languages": "",
"IsDeleted": 0,
"GenreId": 10
},
{
"id": 46,
"Name": "name 2",
"SubName": ""
"Link": "Link 4",
"Active": 1,
"Genre": 11,
"Description": "Description 4",
"Languages": "",
"IsDeleted": 0,
"GenreId": 11
},
{
"id": 47,
"Name": "name 3",
"SubName": "Sub 1"
"Link": "Link 5",
"Active": 1,
"Genre": 12,
"Description": "Description 5",
"Languages": "",
"IsDeleted": 0,
"GenreId": 12
},
{
"id": 48,
"Name": "name 3",
"SubName": "Sub 2"
"Link": "Link 6",
"Active": 1,
"Genre": 13,
"Description": "Description 6",
"Languages": "",
"IsDeleted": 0,
"GenreId": 13
},
{
"id": 49,
"Name": "name 3",
"SubName": "Sub 3"
"Link": "Link 7",
"Active": 1,
"Genre": 14,
"Description": "Description 7",
"Languages": "",
"IsDeleted": 0,
"GenreId": 14
},
{
"id": 50,
"Name": "name 3",
"SubName": "Sub 4"
"Link": "Link 8",
"Active": 1,
"Genre": 15,
"Description": "Description 8",
"Languages": "",
"IsDeleted": 0,
"GenreId": 15
},
{
"id": 51,
"Name": "name 4",
"SubName": ""
"Link": "Link 9",
"Active": 1,
"Genre": 16,
"Description": "Description 9",
"Languages": "",
"IsDeleted": 0,
"GenreId": 16
}]
}
name 1.json
{
"rows": [{
"title": "Sub 1",
"items": [{
"id": 43,
"Name": "name 1",
"SubName": "Sub 1"
"Link": "Link 1",
"Active": 1,
"Genre": 8,
"Description": "Description 1",
"Languages": "",
"IsDeleted": 0,
"GenreId": 8
}]
},
{
"title": "Sub 2",
"items": [{
""id": 44,
"Name": "name 1",
"SubName": "Sub 2"
"Link": "Link 2",
"Active": 1,
"Genre": 9,
"Description": "Description 2",
"Languages": "",
"IsDeleted": 0,
"GenreId": 9
}]
},
{
"title": "Sub 3",
"items": [{
""id": 45,
"Name": "name 1",
"SubName": "Sub 3"
"Link": "Link 3",
"Active": 1,
"Genre": 10
"Description": "Description 3",
"Languages": "",
"IsDeleted": 0,
"GenreId": 10
}]
}
}]
}
name 3.json
{
"rows": [{
"title": "Sub 1",
"items": [{
"id": 47,
"Name": "name 3",
"SubName": "Sub 1"
"Link": "Link 5",
"Active": 1,
"Genre": 12,
"Description": "Description 5",
"Languages": "",
"IsDeleted": 0,
"GenreId": 12
}]
},
{
"title": "Sub 2",
"items": [{
""id": 48,
"Name": "name 3",
"SubName": "Sub 2"
"Link": "Link 6",
"Active": 1,
"Genre": 13,
"Description": "Description 6",
"Languages": "",
"IsDeleted": 0,
"GenreId": 13
}]
},
{
"title": "Sub 3",
"items": [{
""id": 49,
"Name": "name 3",
"SubName": "Sub 3"
"Link": "Link 7",
"Active": 1,
"Genre": 14
"Description": "Description 7",
"Languages": "",
"IsDeleted": 0,
"GenreId": 14
}]
},
{
"title": "Sub 4",
"items": [{
""id": 50,
"Name": "name 3",
"SubName": "Sub 4"
"Link": "Link 8",
"Active": 1,
"Genre": 15
"Description": "Description 8",
"Languages": "",
"IsDeleted": 0,
"GenreId": 15
}]
}
}]
}
我正在尝试使用类似上面的重复名称分隔JSON。我在JSON中只找到了重复的名称,没有其他内容
有人知道如何获取重复值吗
我尝试使用Linq查询并使用
mygeneratedresponse.Skip(1).ToList();
它起作用了。但是有更好的解决方案吗?我不确定这是否是您想要的,但是,请按照一种方法获得重复值,并使用linq对其进行分组 您只需创建一个consoleapp并向其中添加newtonsoft.json,即可运行下面的代码
class Program
{
static string pathA = "<place-your-first-json-location-here>"; //ex: c:\test\test.json
static void Main(string[] args)
{
var json = JsonConvert.DeserializeObject<Test>(File.ReadAllText(pathA));
var filteredByName = json.Response.GroupBy(g => g.Name).OrderBy(o => o.Key).ToList();
foreach (var item in filteredByName)
{
Console.WriteLine($"Name: {item.Key} Qty response: {item.Count()}" );
}
}
}
以下代码将生成您的预期输出: 此代码也放在.NETFIDLE上
使用系统;
使用System.Collections.Generic;
使用Newtonsoft.Json;
使用System.Linq;
公共课程
{
公共静态void Main()
{
var jsonString=“{\'status\”:“OK\”,“Response\”:[{\'id\”:43,“Name\”:“Name 1\”,“SubName\”:“Sub 1\”,“Link\”:“Link 1\”,“Active\”:1,\“Genre\”:8,\“Description\”:“Description 1\”,“Languages\”:“Languages\”:“IsDeleted\”:0,\“GenreId\”:8},{\'id\':44、\'Name\':\'Name 1\'、\'SubName\':\'sub2\'、\'Link\':\'Link 2\'、\'Active\':1、\'Genre\':9、\'Description\':\'Description 2\'、\'Languages\':\'IsDeleted\':0、\'GenreId\':9}、{\'id\'45、\'Name\':'Name\'Name\'、'SubName\'\“:\“Sub 3\”,“Link\”:“Link 3\”,“Active\”:1,\“Genre\”:10,\“Description\”:“Description 3\”,“Languages\”:“Description 3\”,\“Languages\”:“IsDeleted\”:0,\“GenreId\”:10},{\“id\”:46,\“Name\:“Name 2\”,“SubName\”:“SubName\”,“Link\”:“Link\”,“Link\”:“Link 4\”,“Active\”:1,“流派”:11,“描述”:描述4“,“语言”:“,”IsDeleted\”:0,“流派”:11},{“id”:47,“名称”:描述3“,”子名称“:”子1“,”链接“:”链接5“,”活动“:1“,”流派“:12“,”描述“:”描述5”“,”语言“:\”,”被删除“,”链接“:”链接6“,”活动“:1,,”流派“:13,,”描述“:”描述6“,”语言“:”被删除“,”描述6“,”语言“,”被删除“:0\“GenreId\”:13},{“id\”:49,\“Name\”:“Name 3\”,“SubName\”:“Sub 3\”,“Link\”:“Link 7\”,“Active\”:1,\“Genre\”:14,\“Description\”:“Description 7\”,“Languages\”:“,“IsDeleted\”:0,\“GenreId\”:14,\“id\”:50,\“Name\:”名称3“,”子名称“:”子4“,”链接“:”链接8“,”活动“:1,,”流派“:15,,”描述“:”描述8“,”语言“:”,”IsDeleted“:0,,”GenreId“:15},{”id“:51,,”名称“:”名称4“,”子名称“:”链接9\“,”活动“:1,\”流派“:16,\”描述“:\”描述9“,\”语言“:\”,\”IsDeleted\”:0,\”GenreId\“:16}]}”;
var json=JsonConvert.DeserializeObject(jsonString);
var filteredByName=json.Response.GroupBy(g=>g.Name).OrderBy(o=>o.Key).ToList();
foreach(filteredByName中的变量项)
{
var fileObject=item.GroupBy(x=>x.SubName)。选择(s=>new{title=s.Key,items=s.ToList());
var fileJson=JsonConvert.SerializeObject(fileObject,Formatting.Indented);
Console.WriteLine(“+item.Key+”.json”);
Console.WriteLine(fileJson);
}
}
}
公共类JsonResponse{
公共int id{get;set;}
公共字符串名称{get;set;}
公共字符串子名称{get;set;}
公共字符串链接{get;set;}
公共int活动{get;set;}
公共int类型{get;set;}
公共字符串说明{get;set;}
公共字符串语言{get;set;}
公共int被删除{get;set;}
public int GenreId{get;set;}
}
公共类根{
公共字符串状态{get;set;}
公共列表响应{get;set;}
}
我试过使用Linq QUARY并应用skip(1)。它是有效的。但是,它不是更好的解决方案。-然后请您的问题说明您尝试了什么,并解释为什么“它不是更好的解决方案”“.From:帮助他人重现问题…如果您的问题与您编写的代码有关,您应该包含一些。包含足够的代码以允许他人重现问题。您有类似的问题,因此如果您能够以最小的方式重现您的问题,我们就更有可能提供帮助。”。
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Linq;
public class Program
{
public static void Main()
{
var jsonString = "{ \"status\": \"OK\", \"Response\": [{ \"id\": 43, \"Name\": \"name 1\", \"SubName\": \"Sub 1\", \"Link\": \"Link 1\", \"Active\": 1, \"Genre\": 8, \"Description\": \"Description 1\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 8 }, { \"id\": 44, \"Name\": \"name 1\", \"SubName\": \"Sub 2\", \"Link\": \"Link 2\", \"Active\": 1, \"Genre\": 9, \"Description\": \"Description 2\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 9 }, { \"id\": 45, \"Name\": \"name 1\", \"SubName\": \"Sub 3\", \"Link\": \"Link 3\", \"Active\": 1, \"Genre\": 10, \"Description\": \"Description 3\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 10 }, { \"id\": 46, \"Name\": \"name 2\", \"SubName\": \"\", \"Link\": \"Link 4\", \"Active\": 1, \"Genre\": 11, \"Description\": \"Description 4\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 11 }, { \"id\": 47, \"Name\": \"name 3\", \"SubName\": \"Sub 1\", \"Link\": \"Link 5\", \"Active\": 1, \"Genre\": 12, \"Description\": \"Description 5\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 12 }, { \"id\": 48, \"Name\": \"name 3\", \"SubName\": \"Sub 2\", \"Link\": \"Link 6\", \"Active\": 1, \"Genre\": 13, \"Description\": \"Description 6\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 13 }, { \"id\": 49, \"Name\": \"name 3\", \"SubName\": \"Sub 3\", \"Link\": \"Link 7\", \"Active\": 1, \"Genre\": 14, \"Description\": \"Description 7\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 14 }, { \"id\": 50, \"Name\": \"name 3\", \"SubName\": \"Sub 4\", \"Link\": \"Link 8\", \"Active\": 1, \"Genre\": 15, \"Description\": \"Description 8\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 15 }, { \"id\": 51, \"Name\": \"name 4\", \"SubName\": \"\", \"Link\": \"Link 9\", \"Active\": 1, \"Genre\": 16, \"Description\": \"Description 9\", \"Languages\": \"\", \"IsDeleted\": 0, \"GenreId\": 16 }]}";
var json = JsonConvert.DeserializeObject<Root>(jsonString);
var filteredByName = json.Response.GroupBy(g => g.Name).OrderBy(o => o.Key).ToList();
foreach (var item in filteredByName)
{
var fileObject = item.GroupBy(x=>x.SubName).Select(s=> new { title =s.Key, items= s.ToList()});
var fileJson = JsonConvert.SerializeObject(fileObject, Formatting.Indented);
Console.WriteLine("" + item.Key +".json");
Console.WriteLine(fileJson);
}
}
}
public class JsonResponse {
public int id { get; set; }
public string Name { get; set; }
public string SubName { get; set; }
public string Link { get; set; }
public int Active { get; set; }
public int Genre { get; set; }
public string Description { get; set; }
public string Languages { get; set; }
public int IsDeleted { get; set; }
public int GenreId { get; set; }
}
public class Root {
public string status { get; set; }
public List<JsonResponse> Response { get; set; }
}