删除除特定路径之外的所有JTokens

时间:2016-04-22 15:04:07

标签: c# json tree

问题

让我说我有:

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

0 个答案:

没有答案