2014-11-06 61 views
0

我不明白如何導入一個或多個在他們的父親的每個孩子的「姓名」「名字」,以及如何創建一個方法,將我的孩子的父親給我。 任何人都可以幫助我嗎?如何在java中使用gson反序列化這個json文件?

JSON

{ 
    "child": [ 
     { 
      "name": "one", 
      "child": [ 
       { 
        "id": "0001", 
        "name": "oneone", 
        "image": "one.jpg", 
        "child": [ 
         { 
          "id": "1", 
          "name": "oneoneone", 
          "child": [ 
           { 
            "id": "1", 
            "name": "oneoneoneone", 
            "child": [ 
             { 
              "id": "1", 
              "name": "oneoneoneoneone" 
             }, 
             { 
              "id": "2", 
              "name": "oneoneoneonetwo" 
             }, 
             { 
              "id": "3", 
              "name": "oneoneoneonethree" 
             } 
            ] 
           }, 
           { 
            "id": "2", 
            "name": "oneoneonetwo" 
           }, 
           { 
            "id": "3", 
            "name": "oneoneonethree" 
           } 
          ] 
         }, 
         { 
          "id": "2", 
          "name": "oneonetwo" 
         } 
        ] 
       }, 
       { 
        "id": "0002", 
        "name": "onetwo", 
        "image": "two.jpg" 
       }, 
       { 
        "id": "onethree", 
        "name": "three", 
        "image": "three.jpg" 
       } 
      ] 
     }, 
     { 
      "name": "two", 
      "child": [ 
       { 
        "id": "0004", 
        "name": "twoone", 
        "image": "one.jpg" 
       }, 
       { 
        "id": "0005", 
        "name": "twotwo", 
        "image": "two.jpg", 
        "child": [ 
         { 
          "id": "1", 
          "name": "twotwoone", 
          "child": [ 
           { 
            "id": "1", 
            "name": "twotwooneone" 
           }, 
           { 
            "id": "2", 
            "name": "twotwoonetwo" 
           }, 
           { 
            "id": "3", 
            "name": "twotwoonethree" 
           } 
          ] 
         }, 
         { 
          "id": "2", 
          "name": "twotwotwo" 
         } 
        ] 
       }, 
       { 
        "id": "0006", 
        "name": "twothree", 
        "image": "three.jpg" 
       } 
      ] 
     } 

    ] 
} 

兒童

public class Child { 

    private String id; 
    private String name; 
    private String image; 
    private List<Child> child = new ArrayList<Child>(); 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getImage() { 
     return image; 
    } 

    public void setImage(String image) { 
     this.image= image; 
    } 

    public List<Child> getChild() { 
     return child; 
    } 

    public void setChild(List<Child> child) { 
     this.child = child; 
    } 

} 

回答

0

試試這個代碼。要獲得給定孩子的父母使用getParentFor方法,其中第一個參數arg是結構的根,第二個參數是給定孩子的名稱。

public class GsonExample1 { 

    interface ExampleVisitor { 
     void onParentStart(Example example); 

     void onChild(Example example); 

    } 

    static class Example { 

     private String id; 
     private String name; 
     private String immagine; 
     private Example[] child; 

     public void accept(ExampleVisitor visitor) { 
      visitor.onParentStart(this); 

      if (child != null) { 
       for (Example c : child) { 
        visitor.onChild(c); 
       } 

       for (Example c : child) { 
        c.accept(visitor); 
       } 
      } 
     } 

     @Override 
     public String toString() { 
      return "Example [id=" + id + ", name=" + name + ", immagine=" 
        + immagine + ", child=" + Arrays.toString(child) + "]"; 
     } 

    } 

    public static Example getParentFor(Example root, final String name) { 

     final Example[] bag = new Example[1]; 
     root.accept(new ExampleVisitor() { 

      private Example currentParent; 

      public void onParentStart(Example example) { 
       currentParent = example; 
      } 

      public void onChild(Example example) { 

       if (name.equals(example.name)) { 
        bag[0] = currentParent; 
       } 

      } 
     }); 
     return bag[0]; 
    } 

    public static Example[] getAllChildrenFor(Example root, final String name) { 
     final Example[] bag = new Example[1]; 
     root.accept(new ExampleVisitor() { 

      public void onParentStart(Example example) { 
       if (name.equals(example.name)) { 
        bag[0] = example; 
       } 
      } 

      public void onChild(Example example) { 

      } 
     }); 
     return bag[0] != null ? bag[0].child : null; 
    } 

    public static void main(String[] args) { 

     GsonExample1.class.getResourceAsStream("sample1.txt"); 
     Gson gson = new Gson(); 
     Example root = gson.fromJson(
       new InputStreamReader(GsonExample1.class 
         .getResourceAsStream("sample1.txt")), Example.class); 

     System.out.println(root); 

     System.out.println(getParentFor(root, "oneoneone")); 

     System.out.println(Arrays 
       .toString(getAllChildrenFor(root, "oneoneone"))); 

    } 
} 

輸出

Example [id=null, name=null, immagine=null, child=[Example [id=null, name=one, immagine=null, child=[Example [id=0001, name=oneone, immagine=one.jpg, child=[Example [id=1, name=oneoneone, immagine=null, child=[Example [id=1, name=oneoneoneone, immagine=null, child=[Example [id=1, name=oneoneoneoneone, immagine=null, child=null], Example [id=2, name=oneoneoneonetwo, immagine=null, child=null], Example [id=3, name=oneoneoneonethree, immagine=null, child=null]]], Example [id=2, name=oneoneonetwo, immagine=null, child=null], Example [id=3, name=oneoneonethree, immagine=null, child=null]]], Example [id=2, name=oneonetwo, immagine=null, child=null]]], Example [id=0002, name=onetwo, immagine=two.jpg, child=null], Example [id=onethree, name=three, immagine=three.jpg, child=null]]], Example [id=null, name=two, immagine=null, child=[Example [id=0004, name=twoone, immagine=one.jpg, child=null], Example [id=0005, name=twotwo, immagine=two.jpg, child=[Example [id=1, name=twotwoone, immagine=null, child=[Example [id=1, name=twotwooneone, immagine=null, child=null], Example [id=2, name=twotwoonetwo, immagine=null, child=null], Example [id=3, name=twotwoonethree, immagine=null, child=null]]], Example [id=2, name=twotwotwo, immagine=null, child=null]]], Example [id=0006, name=twothree, immagine=three.jpg, child=null]]]]] 

父母對兒童oneoneone

Example [id=0001, name=oneone, immagine=one.jpg, child=[Example [id=1, name=oneoneone, immagine=null, child=[Example [id=1, name=oneoneoneone, immagine=null, child=[Example [id=1, name=oneoneoneoneone, immagine=null, child=null], Example [id=2, name=oneoneoneonetwo, immagine=null, child=null], Example [id=3, name=oneoneoneonethree, immagine=null, child=null]]], Example [id=2, name=oneoneonetwo, immagine=null, child=null], Example [id=3, name=oneoneonethree, immagine=null, child=null]]], Example [id=2, name=oneonetwo, immagine=null, child=null]]] 
+0

感謝@slavik的答覆,但如果我有父親的一個,因爲我也能開你的孩子的名字? – 2014-11-06 14:36:05

+0

答案更新:) – slavik 2014-11-06 14:49:31

+0

謝謝@slavik,我已經看到了,但是如果你想讓每個父親都有自己的孩子,而不是所有的孩子?對於重複請求抱歉,但我有這個問題幾天。:D – 2014-11-06 15:20:19