C# 如何从动态超嵌套Json中通过键获取值?
JSON链接 我有一个动态嵌套的json。我有一个使用key的key,我需要从json中找出值。 N:B我不知道密钥的父节点。 请参考链接,如果我传递一个键,如果该键在json中的任何级别都存在,那么它应该返回值 我尝试了以下代码,但没有得到结果C# 如何从动态超嵌套Json中通过键获取值?,c#,C#,JSON链接 我有一个动态嵌套的json。我有一个使用key的key,我需要从json中找出值。 N:B我不知道密钥的父节点。 请参考链接,如果我传递一个键,如果该键在json中的任何级别都存在,那么它应该返回值 我尝试了以下代码,但没有得到结果 public static TType JsonValue<TType>(this JObject obj, string key) { object result = null; //default to null if noth
public static TType JsonValue<TType>(this JObject obj, string key)
{
object result = null; //default to null if nothing is found
foreach (var item in obj)
{
var token = item;
if (token.Key.Equals(key, StringComparison.InvariantCultureIgnoreCase))
{
result = token.Value.ToObject<TType>(); //return the value found
break;
}
if (!obj[token.Key].Children().Any())
continue;
var jt = obj[token.Key].ToString();
if (!jt.StartsWith("["))
{
result = JsonValue<TType>(JObject.Parse(jt), key);
}
else
{
obj[token.Key].Children().ToList().ForEach(x =>
{
//only the first match will be returned
result = JsonValue<TType>(JObject.Parse(x.ToString()), key);
});
}
if (result != null)
break;
}
return (TType)result;
}
publicstaticttype JsonValue(此JObject对象,字符串键)
{
object result=null;//如果找不到任何内容,则默认为null
foreach(obj中的var项目)
{
var标记=项目;
if(token.Key.Equals(Key,StringComparison.InvariantCultureIgnoreCase))
{
result=token.Value.ToObject();//返回找到的值
打破
}
如果(!obj[token.Key].Children().Any())
继续;
var jt=obj[token.Key].ToString();
如果(!jt.StartsWith(“[”))
{
result=JsonValue(JObject.Parse(jt),key);
}
其他的
{
obj[token.Key].Children().ToList().ForEach(x=>
{
//只返回第一个匹配项
result=JsonValue(JObject.Parse(x.ToString()),key);
});
}
如果(结果!=null)
打破
}
返回(TType)结果;
}
也许值得尝试XPath表达式?特别是如果您有没有模式的动态json,无法下载json文件,请尝试这个可能的副本,区别在哪里?