让我说我有:
var json = JObject.Parse("imagine some large JSON here");
现在让我们这样做:
var subtree = json.SelectNode("root.child.grandson");
我只关心:
大。所以我想出了这个方法:
private static void KillMySiblings(JToken token)
{
if (token.Root == token)
return;
var siblingsAndSelf = token.Parent.Children().ToArray();
foreach (var sibling in siblingsAndSelf)
{
if (ReferenceEquals(sibling, token))
continue;
// this removes the token from its parent
sibling.Remove();
}
}
使用此代码:
var ancestors = subtree.AncestorsAndSelf();
foreach (var ancestor in ancestors)
KillMySiblings(ancestor);
诀窍。
因为我不喜欢我的解决方案,而且我正在寻求更简单的概念和更高效的方法。我不喜欢通过潜在的O(n)节点并删除它们的想法。我觉得我应该提取那些父母并从中建立一棵新树 - 但我不知道如何正确地做到这一点。
任何帮助将不胜感激! :d