使用 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