2017-02-28 151 views
0

我有一個產品類別的JSON文件。從Java Json平面數組構建樹結構 - Android

的JSON的每個條目都有:

  • 編號:獨特的類ID
  • IdParent:父節點
  • 的ID ...名稱&的ImageUrl

樣品日期:

[ 
    { 
     "ImageUrl":"1-home_default/1", 
     "Id":1, 
     "IdParent":0, 
     "Name":"Root" 
    }, 
    { 
     "ImageUrl":"2-home_default/2", 
     "Id":2, 
     "IdParent":1, 
     "Name":"Home" 
    }, 
    { 
     "ImageUrl":"12-home_default/12", 
     "Id":12, 
     "IdParent":2, 
     "Name":"Fruit" 
    }, 
    { 
     "ImageUrl":"336-home_default/336", 
     "Id":336, 
     "IdParent":2, 
     "Name":"Papers" 
    }, 
    { 
     "ImageUrl":"33-home_default/33", 
     "Id":33, 
     "IdParent":2, 
     "Name":"Food" 
    }, 
    { 
     "ImageUrl":"95-home_default/95", 
     "Id":95, 
     "IdParent":2, 
     "Name":"Meet" 
    }, 
    { 
     "ImageUrl":"121-home_default/121", 
     "Id":121, 
     "IdParent":2, 
     "Name":"Bolvery" 
    }, 
    { 
     "ImageUrl":"145-home_default/145", 
     "Id":145, 
     "IdParent":2, 
     "Name":"Milk Breakfast" 
    }, 
    { 
     "ImageUrl":"189-home_default/189", 
     "Id":189, 
     "IdParent":2, 
     "Name":"Food OUt" 
    }, 
    { 
     "ImageUrl":"269-home_default/269", 
     "Id":269, 
     "IdParent":2, 
     "Name":"Cleaning" 
    }, 
    { 
     "ImageUrl":"305-home_default/305", 
     "Id":305, 
     "IdParent":2, 
     "Name":"Babies" 
    }, 
    { 
     "ImageUrl":"401-home_default/401", 
     "Id":401, 
     "IdParent":2, 
     "Name":"Lifestyle" 
    }, 
    { 
     "ImageUrl":"413-home_default/413", 
     "Id":413, 
     "IdParent":2, 
     "Name":"Products" 
    }, 
    { 
     "ImageUrl":"426-home_default/426", 
     "Id":426, 
     "IdParent":2, 
     "Name":"Copaigns" 
    }, 
    { 
     "ImageUrl":"23-home_default/23", 
     "Id":23, 
     "IdParent":12, 
     "Name":"Seeds" 
    }, 
    { 
     "ImageUrl":"344-home_default/344", 
     "Id":344, 
     "IdParent":336, 
     "Name":"Mouth products" 
    }, 
    { 
     "ImageUrl":"34-home_default/34", 
     "Id":34, 
     "IdParent":33, 
     "Name":"Macarna" 
    }, 
    { 
     "ImageUrl":"103-home_default/103", 
     "Id":103, 
     "IdParent":95, 
     "Name":"Animals" 
    }, 
    { 
     "ImageUrl":"127-home_default/127", 
     "Id":127, 
     "IdParent":121, 
     "Name":"Drinks" 
    }, 
    { 
     "ImageUrl":"146-home_default/146", 
     "Id":146, 
     "IdParent":145, 
     "Name":"Milk" 
    }, 
    { 
     "ImageUrl":"190-home_default/190", 
     "Id":190, 
     "IdParent":189, 
     "Name":"Electronics" 
    }, 
    { 
     "ImageUrl":"276-home_default/276", 
     "Id":276, 
     "IdParent":269, 
     "Name":"Cleaning2" 
    }, 
    { 
     "ImageUrl":"310-home_default/310", 
     "Id":310, 
     "IdParent":305, 
     "Name":"Kids Cleaning" 
    }, 
    { 
     "ImageUrl":"402-home_default/402", 
     "Id":402, 
     "IdParent":401, 
     "Name":"Traveling" 
    } 
] 

我試圖填補這一JSON文件,以樹狀結構下面的一個:

public class Tree<T> { 
    private Node<T> root; 

    public Tree(T rootData) { 
     root = new Node<T>(); 
     root.data = rootData; 
     root.children = new ArrayList<Node<T>>(); 
    } 

    public static class Node<T> { 
     private T data; 
     private Node<T> parent; 
     private List<Node<T>> children; 
    } 
} 

這樣當用戶點擊的節點,如果有孩子,它會列出孩子,否則會打開該類別的產品。

我已經轉換了JSON來List<Category>

如何List<Category>轉換爲Tree

回答

0

基於答案,我已經發現here,我已經做到了在Java中是這樣的:

我的映射對象:

public class MyObject { 
    public Long objectId; 
    public String objectName; 
    public Long parentObjectId; 

    public MyObject(Long objectId, String objectName, Long parentObjectId) { 
     this.objectId = objectId; 
     this.objectName = objectName; 
     this.parentObjectId = parentObjectId; 
    } 
} 

Node類:

public class Node { 
    public List<Node> Children = new ArrayList<>(); 
    public Node Parent; 
    public MyObject Source; 

    public MyObject getSourceObject() { 
     return Source; 
    } 
    public void setSourceObject(MyObject Source) { 
     Source = Source; 
    } 
    public Node getParent() { 
     return Parent; 
    } 
    public void setParent(Node parent) { 
     Parent = parent; 
    } 
} 

如何構建樹:

public List<Node> BuildTreeAndGetRoots(List<MyObject> actualObjects) { 
    Map<Long, Node> lookup = new HashMap<>(); 
    List rootNodes = new ArrayList<Node>(); 

    for (MyObject object : actualObjects) { 
     // add us to lookup 
     Node ourNode; 
     if (lookup.containsKey(object.objectId)) { // was already found as a parent - register the actual object 
      ourNode = lookup.get(object.objectId); 
      ourNode.Source = object; 
     } else { 
      ourNode = new Node(); 
      ourNode.Source = object; 

      lookup.put(object.objectId, ourNode); 
     } 

     // hook into parent 
     if (object.parentObjectId == null || object.parentObjectId.equals(object.objectId)) { // is a root node 
      rootNodes.add(ourNode); 
     } else { // is a child row - so we have a parent 
      Node parentNode; 
      if (!lookup.containsKey(object.parentObjectId)) { // unknown parent, construct preliminary parent 
       parentNode = new Node(); 
       lookup.put(object.parentObjectId, parentNode); 
      } else { 
       parentNode = lookup.get(object.parentObjectId); 
      } 
      parentNode.Children.add(ourNode); 
      ourNode.Parent = parentNode; 
     } 
    } 

    return rootNodes; 
}