gpt4 book ai didi

c# - 同时将两个 JToken 作为键/值对添加到字典中

转载 作者:太空宇宙 更新时间:2023-11-03 12:25:39 28 4
gpt4 key购买 nike

我有一个包含这些信息的 json 文件:

{
"type" : "Something",
"values" :
[
{ "type": "Something else",
"categories": {
"values": [ "Grocery" ]},
"Name": "Eggs"
},
{ "type": "Something else",
"categories": {
"values": [ "Utensil" ]},
"Name": "Spoon"
}
]}

我是这样解析的

string jstring = File.ReadAlltext(jsonFile); 
JObject json = JObject.Parse(jstring);

现在我只想获取 Name 和 CategoryValue,并使它们成为字典中的键/值对。所以我这样开始:

foreach (var item in json["values"]){
Console.WriteLine(item["categories"]["values"] + ":" + item["Name"]};

我得到的输出是:

Grocery:Eggs

Utensil:spoon

我的问题:当我在 foreach 循环中检索这些信息时,将这些信息直接添加到字典的最有效方法是什么?

我尝试使用在 Newtonsoft 的文档网站上找到的一些 JToken 属性失败:http://www.newtonsoft.com/json/help/html/Properties_T_Newtonsoft_Json_Linq_JToken.htm

我考虑过使用 String Split 并附加到列表,但这效率不高而且太笨拙。请帮忙。我会非常感激我能得到的任何东西。提前致谢!

最佳答案

我假设每个项目可能有多个类别,并且相同的类别可以出现在多个项目上?在这种情况下,您希望字典是 Dictionary<string, List<string>>。其中键是类别,值是属于该类别的所有项目的列表。您可以使用 LINQ 方法创建此字典:

Dictionary<string, List<string>> dict = obj["values"]
.Select(jo => jo.SelectToken("categories.values")
.Select(t => new
{
Category = (string)t,
Name = (string)jo["Name"]
}))
.SelectMany(a => a)
.GroupBy(a => a.Category)
.ToDictionary(g => g.Key, g => g.Select(a => a.Name).ToList());

然后:

foreach (var kvp in dict)
{
Console.WriteLine(kvp.Key + ": " + string.Join(", ", kvp.Value));
}

fiddle :https://dotnetfiddle.net/MxRqg6

关于c# - 同时将两个 JToken 作为键/值对添加到字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45159116/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com