C# 如何查询多个json节点?
我有以下json:C# 如何查询多个json节点?,c#,json,.net,json.net,C#,Json,.net,Json.net,我有以下json: { "key445" : { "text" : "cat", "id" : 445 }, "key457" : { "text" : "mouse", "id" : 457 }, "key458" : { "text"
{
"key445" : {
"text" : "cat",
"id" : 445
},
"key457" : {
"text" : "mouse",
"id" : 457
},
"key458" : {
"text" : "rodent",
"id" : 458
}
}
我正在尝试将文本
和id
提取到列表
(一个带有字符串和int的类),甚至分别提取到列表
和列表
我使用JObject.Parse
方法将文本读入JObject。但是,我不知道如何访问文本和id节点。我尝试了以下方法,但它没有返回任何结果
var textTokens = o.SelectTokens("/*/text");
var idTokens = o.SelectTokens("/*/id");
如何获得所需的令牌?我只需将整个JSON转换为一个
字典
,而不必尝试使用JsonPath:
使用Newtonsoft.Json;
使用制度;
使用System.Collections.Generic;
使用System.IO;
公共类文本标识符
{
公共字符串文本{get;set;}
公共int Id{get;set;}
公共重写字符串ToString()=>$“Id:{Id};Text:{Text}”;
}
公开课考试
{
静态void Main()
{
var json=File.ReadAllText(“test.json”);
var dictionary=JsonConvert.DeserializeObject(json);
foreach(字典中的var对)
{
Console.WriteLine($“{pair.Key}=>{pair.Value}”);
}
}
}
输出:
key445 => Id: 445; Text: cat
key457 => Id: 457; Text: mouse
key458 => Id: 458; Text: rodent
如果您不关心键,可以使用
dictionary.Values.ToList()
来获取列表
,尽管您不应该依赖它们的顺序。我只需将整个JSON转换为字典
,而不必尝试使用JsonPath:
使用Newtonsoft.Json;
使用制度;
使用System.Collections.Generic;
使用System.IO;
公共类文本标识符
{
公共字符串文本{get;set;}
公共int Id{get;set;}
公共重写字符串ToString()=>$“Id:{Id};Text:{Text}”;
}
公开课考试
{
静态void Main()
{
var json=File.ReadAllText(“test.json”);
var dictionary=JsonConvert.DeserializeObject(json);
foreach(字典中的var对)
{
Console.WriteLine($“{pair.Key}=>{pair.Value}”);
}
}
}
输出:
key445 => Id: 445; Text: cat
key457 => Id: 457; Text: mouse
key458 => Id: 458; Text: rodent
如果你不关心键,你可以使用
dictionary.Values.ToList()
来获得一个列表
,尽管你不应该依赖它们的顺序。有什么理由解析成JObject
而不是解析成dictionary
,我怀疑这会立即起作用吗?@JonSkeet没有理由,我只是不知道怎么做。JObject似乎是调试这个的好方法。对。因此,如果TextIdentifier
具有Text
和Id
的可写属性,那么您需要做的就是:)@jonsket我的问题是找到正确的JsonPath查询来从json中提取这些令牌。一旦我得到它们,我肯定可以将它们写入一个对象。我的观点是,您根本不需要使用JsonPath。只需将整个对象转换为字典
,如果只需要值,只需使用值
属性即可。除非您需要按照JSON文件的顺序使用它们,否则JSON文件将非常脆弱。(现在添加一个示例。)有什么理由解析成JObject
而不是解析成Dictionary
,我怀疑这会立即起作用吗?@JonSkeet没有理由,我只是不知道怎么做。JObject似乎是调试这个的好方法。对。因此,如果TextIdentifier
具有Text
和Id
的可写属性,那么您需要做的就是:)@jonsket我的问题是找到正确的JsonPath查询来从json中提取这些令牌。一旦我得到它们,我肯定可以将它们写入一个对象。我的观点是,您根本不需要使用JsonPath。只需将整个对象转换为字典
,如果只需要值,只需使用值
属性即可。除非您需要按照JSON文件的顺序使用它们,否则JSON文件将非常脆弱。(现在添加一个样本)哇,这真是太完美了。我希望我能投更多的票。哇,真是太好了。我希望我能投更多的票。