使用 Json.Net 从嵌套 JSON 获取键的路径
Get the path of a key from nested JSON using Json.Net
我有一个很大的嵌套JSON。我不知道 JSON 的结构。
我只有 JSON 中的一组键,但我不知道 JSON 中的确切位置。
假设密钥存在于其中某处,我如何从未知 JSON 结构中找出密钥的路径?
对于未知结构,您可以遍历对象:
var reader = new JsonTextReader(new StringReader(jsonText))
while (reader.Read())
{
// Do a condition on the variables reader.TokenType, reader.ValueType, reader.Value
}
你可以使用
JObject o = JObject.Parse(<yourjson>);
dynamic obj = o.SelectTokens("$..Product");
此方法将记录顶级 json 中键等于 "key"
的所有路径
var keys = jobject.Properties().Where(p => p.Name == key).ToList();
keys.ForEach(i => Console.WriteLine(i.Path));
这不会以递归方式工作,但很容易从那里进行递归搜索
如果您的 JSON 结构未知,您可以将其解析为 JToken
,如下所示:
JToken token = JToken.Parse(json);
从那里,您可以使用任一 SelectToken()
or SelectTokens()
with a recursive descent JsonPath 表达式来查找与键匹配的 属性(或属性):
JToken match = token.SelectToken("$.." + keyToFind);
获得匹配的令牌后,您可以使用其 Path
属性:
获取它的路径
string path = match?.Path;
这是一个工作演示,假设您有多个键可以找到并且每个键可以在 JSON 中出现多次:https://dotnetfiddle.net/9Em9Iq
我有一个很大的嵌套JSON。我不知道 JSON 的结构。 我只有 JSON 中的一组键,但我不知道 JSON 中的确切位置。 假设密钥存在于其中某处,我如何从未知 JSON 结构中找出密钥的路径?
对于未知结构,您可以遍历对象:
var reader = new JsonTextReader(new StringReader(jsonText))
while (reader.Read())
{
// Do a condition on the variables reader.TokenType, reader.ValueType, reader.Value
}
你可以使用
JObject o = JObject.Parse(<yourjson>);
dynamic obj = o.SelectTokens("$..Product");
此方法将记录顶级 json 中键等于 "key"
的所有路径 var keys = jobject.Properties().Where(p => p.Name == key).ToList();
keys.ForEach(i => Console.WriteLine(i.Path));
这不会以递归方式工作,但很容易从那里进行递归搜索
如果您的 JSON 结构未知,您可以将其解析为 JToken
,如下所示:
JToken token = JToken.Parse(json);
从那里,您可以使用任一 SelectToken()
or SelectTokens()
with a recursive descent JsonPath 表达式来查找与键匹配的 属性(或属性):
JToken match = token.SelectToken("$.." + keyToFind);
获得匹配的令牌后,您可以使用其 Path
属性:
string path = match?.Path;
这是一个工作演示,假设您有多个键可以找到并且每个键可以在 JSON 中出现多次:https://dotnetfiddle.net/9Em9Iq