0

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

4

4 回答 4

4

如果您的 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

于 2018-12-27T02:09:09.927 回答
0

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

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

    }
于 2018-12-26T14:19:07.833 回答
0

您可以使用

JObject o = JObject.Parse(<yourjson>);
dynamic obj = o.SelectTokens("$..Product");
于 2018-12-26T14:20:27.873 回答
0

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

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

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

这不会以递归方式工作,但很容易从那里进行递归搜索

于 2018-12-26T14:23:50.590 回答