- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个包含这些信息的 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/
我有以下 Json { "error": { "errors": [ { "domain": "global", "reason": "requ
我有以下... JArray clients = (JArray)clientsParsed["objects"]; foreach (JObject item in clients.Children
JToken.ToObject() 之间有什么区别?方法和 JToken.Value()扩展方法(没有 key 参数的方法)? var jToken = JToken.Parse("123"); va
我有以下 JToken 输出。我如何从 TenantID 中检索此处的“值”,在这种情况下应为 1? {[ { "value": 1, "metadata": { "userType"
我有一个包含参数/值对的 JObject(例如“param1”:“aValue”)。我想根据数据网格中捕获的数据更新这些值。 然后根据定义以下类型的 JSON 架构验证参数值:“字符串”、“整数”和“
假设我有以下 JToken: @"{ ""data"": [ { ""company"": { ""ID"": ""12
我有一个值为 {1234} 的 JToken 如何将其转换为整数值,如 var totalDatas = 1234; var tData = jObject["$totalDatas"]; int t
我有一个 JObject,我想为它设置一个强类型对象的属性。 JObject["ProductionVersion"] = new ProductionVersion(); 为此,需要将 Produc
我有一个 json JTokens 列表: List subjectresults = jObj[jp]["subjects"].Children().ToList(); 请注意,我的 jp 是 va
作为我的问题的后续行动: JSON.NET: Obtain JObject from JProperty Value ... 我阅读了链接并消化了上述评论和建议。现在我想知道:为什么没有“直接”(即简
这是我的情况: 我有一个解析为 JObject 的 JSON 字符串。 JObject jObject = JObject.Parse(json); 我跳转到 JSON 中的“白名单”标记 JToke
这是我的情况: 我有一个解析为 JObject 的 JSON 字符串。 JObject jObject = JObject.Parse(json); 我跳转到 JSON 中的“白名单”标记 JToke
我正在尝试动态查找结构事先未知的 JSON 对象的叶节点名称。首先,我将字符串解析为 JTokens 列表,如下所示: string req = @"{'creationRequest
我有以下JToken: { "ID": "9dbefe3f5424d972e040007f010038f2" } 但每当我在 JToken 对象上运行 ToString() 以获取字符串形式的
在收到来自 API 的响应后,我有以下信息: JObject goatHerd = JObject.Parse(responseString); JToken goat = goatHerd["val
如何将这两个 JToken 合并为一个 JToken。这听起来应该很简单,但我无法绕过它。 { "data":[ { "ID":"53a1862000404a304942546b3
我想比较两个相同类型和结构的任意 JTokens(NewtonSoft 的 Json.Net)。 static int CompareTokens(JToken x, JToken y); // p
我从返回 JSON 响应的 Web 服务获取数据。这是我的代码: WebClient client = new WebClient(); var result = client.DownloadSt
我正在尝试更新 JToken 的值,但它的引用没有得到更新。 JSON 字符串: { "Title": "master", "Presentation": [ {
我想将 JToken 内容反序列化为一个对象(User)。我怎么能做到这一点? 这是我的 json 字符串: string json = @"[{""UserId"":0,""Username"":"
我是一名优秀的程序员,十分优秀!