我有一个很大的嵌套JSON。我不知道JSON的结构。 我只有一组存在于JSON中的键,但是我不知道JSON中的确切位置。 假设密钥存在于某个地方,如何从未知的JSON结构中找出密钥的路径?
答案 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));
这将无法以递归方式进行,但是从那里进行递归搜索很容易