使用Json.Net从嵌套JSON获取密钥的路径

时间:2018-12-26 14:06:55

标签: c# .net json json.net jpath

我有一个很大的嵌套JSON。我不知道JSON的结构。 我只有一组存在于JSON中的键,但是我不知道JSON中的确切位置。 假设密钥存在于某个地方,如何从未知的JSON结构中找出密钥的路径?

4 个答案:

答案 0 :(得分:1)

如果您的JSON结构未知,则可以将其解析为JToken,如下所示:

JToken token = JToken.Parse(json);

从那里,您可以将SelectToken()SelectTokens()与递归下降JsonPath表达式一起使用,以找到与某个键匹配的一个或多个属性:

JToken match = token.SelectToken("$.." + keyToFind);

一旦有了匹配的令牌,就可以使用其Path属性获取其路径:

string path = match?.Path;

这是一个有效的演示,它假定您有多个要查找的键,并且每个键可以在JSON中多次出现:https://dotnetfiddle.net/9Em9Iq

答案 1 :(得分:0)

对于未知结构,您可以遍历对象:

var reader = new JsonTextReader(new StringReader(jsonText))
while (reader.Read())
    {
        // Do a condition on the variables reader.TokenType, reader.ValueType, reader.Value

    }

答案 2 :(得分:0)

您可以使用

JObject o = JObject.Parse(<yourjson>);
dynamic obj = o.SelectTokens("$..Product");

答案 3 :(得分:0)

此方法将记录顶级json中键等于“ key”的所有路径

        var keys = jobject.Properties().Where(p => p.Name == key).ToList();

        keys.ForEach(i => Console.WriteLine(i.Path));

这将无法以递归方式进行,但是从那里进行递归搜索很容易