如何解决根据父名称获取JToken的路径
"flows": [
{
"network1": {
"downlinkUnit": "u1Kbps","downlinkValue": 2,"uplinkUnit": "u1Kbps","uplinkValue": 10
},"network2": {
"downlinkUnit": "u2Kbps","downlinkValue": 8,"uplinkUnit": "u4Kbps","uplinkValue": 12
},}
]
我正在尝试基于父级具有的值访问2个不同的downlinkUnit
属性。
我想我已经很接近了,但是我想念一些东西:
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);
如果删除&& p.Parent.Contains("network1"))
,代码可以正常工作,并且我可以访问downlinkUnit
的路径。但是,我确实想要一些可以检查父母的东西。我在这里想念什么?
解决方法
您可以分析父级的Path
属性:
var paramPath = jObject.Descendants()
.OfType<JProperty>()
.Where(p => p.Name.Contains("downlinkUnit") && p.Parent.Path.EndsWith(".network1"))
.First()
.Path;
或使用JSON Path:
var x = @"{""flows"": [
{
""network1"": {
""downlinkUnit"": ""u1Kbps"",""downlinkValue"": 2,""uplinkUnit"": ""u1Kbps"",""uplinkValue"": 10
},""network2"": {
""downlinkUnit"": ""u2Kbps"",""downlinkValue"": 8,""uplinkUnit"": ""u4Kbps"",""uplinkValue"": 12
},}
]}";
var path = JToken.Parse(x)
.SelectTokens("$.flows.[*].['network1'].downlinkUnit")
.Select(t => t.Path)
.First();
Console.WriteLine(path); // prints "flows[0].network1.downlinkUnit"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。