C# 基于父名称获取JToken的路径
我有一个重复多次的Json文件:C# 基于父名称获取JToken的路径,c#,json.net,C#,Json.net,我有一个重复多次的Json文件: "flows": [ { "network1": { "downlinkUnit": "u1Kbps", "downlinkValue": 2, "uplinkUnit": "u1Kbps",
"flows": [
{
"network1": {
"downlinkUnit": "u1Kbps",
"downlinkValue": 2,
"uplinkUnit": "u1Kbps",
"uplinkValue": 10
},
"network2": {
"downlinkUnit": "u2Kbps",
"downlinkValue": 8,
"uplinkUnit": "u4Kbps",
"uplinkValue": 12
},
}
]
我正试图根据父级的值访问2个不同的下行链路单元
属性。
我想我离它很近了,但我错过了一些东西:
var paramPath = jObject.Descendants()
.OfType<JProperty>()
.Where(p => p.Name.Contains("downlinkUnit") && p.Parent.Contains("network1"))
.First()
.Path;
var token = jObject.SelectToken(paramPath);
token.Replace(JToken.FromObject(item.Value));
Console.WriteLine(paramPath);
var paramPath=jObject.subjects()
第()类
其中(p=>p.Name.Contains(“下行链路单元”)和&p.Parent.Contains(“网络1”))
.First()
路径
var token=jObject.SelectToken(paramPath);
替换(JToken.FromObject(item.Value));
Console.WriteLine(paramPath);
如果我删除
和&p.Parent.Contains(“network1”)
,代码工作正常,我可以访问下行链路单元的路径。但是,我确实需要检查父级的东西。我在这里遗漏了什么?您可以分析父级的Path
属性:
var paramPath = jObject.Descendants()
.OfType<JProperty>()
.Where(p => p.Name.Contains("downlinkUnit") && p.Parent.Path.EndsWith(".network1"))
.First()
.Path;
您可以分析父级的Path
属性:
var paramPath = jObject.Descendants()
.OfType<JProperty>()
.Where(p => p.Name.Contains("downlinkUnit") && p.Parent.Path.EndsWith(".network1"))
.First()
.Path;
你所说的“基于父母拥有的价值”是什么意思?你想如何“检查”父项(具体应该检查什么)?@GuruStron按父项的值,我指的是它的名称。我想访问network1或network2下的下行链路单元路径,具体取决于父对象的值您在说什么“值”?你的Json是动态的吗?应该只处理“网络1”和“网络2”吗?有可能有“网络3”吗?或者你担心在另一个完全不同的json对象中会出现其他“downlinkUnit”属性?@GuruStron我在这个json文件中有很多同名的参数,所以我访问它们时会给出一个字符串(比如:“downlinkUnit\u network1”)并将其拆分为“downlinkUnit”和“network1”,这样我就可以准确地知道它们在JSON文件中的位置,否则我就无法访问我想要的“下行链路单元”。你所说的“基于父级拥有的值”是什么意思?你想如何“检查”父项(具体应该检查什么)?@GuruStron按父项的值,我指的是它的名称。我想访问network1或network2下的下行链路单元路径,具体取决于父对象的值您在说什么“值”?你的Json是动态的吗?应该只处理“网络1”和“网络2”吗?有可能有“网络3”吗?或者你担心在另一个完全不同的json对象中会出现其他“downlinkUnit”属性?@GuruStron我在这个json文件中有很多同名的参数,所以我访问它们时会给出一个字符串(比如:“downlinkUnit\u network1”)并将其拆分为“downlinkUnit”和“network1”,这样我就可以准确地知道它们在JSON文件中的位置,否则我就无法访问我想要的“下行链路单元”。太好了!多谢各位!“.EndsWith()”是唯一缺少的东西。@DavideGanna很乐意帮忙!顺便说一句,您只需替换JProperty
的值,而无需额外的路径处理:var paramPath=jObject….First();paramPath.Value.Replace(JToken.FromObject(item.Value))代码>完美!多谢各位!“.EndsWith()”是唯一缺少的东西。@DavideGanna很乐意帮忙!顺便说一句,您只需替换JProperty
的值,而无需额外的路径处理:var paramPath=jObject….First();paramPath.Value.Replace(JToken.FromObject(item.Value))代码>