【问题标题】:how to deserialize this json file with gson in java?如何在java中用gson反序列化这个json文件?
【发布时间】:2014-11-06 14:17:25
【问题描述】:

我不明白如何在 hashmap 中导入一个或多个 "name" 每个孩子及其父亲的"name",以及如何创建一种方法将她孩子的父亲还给我. 谁能帮帮我?

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;
    }

}

【问题讨论】:

    标签: java json hashmap gson json-deserialization


    【解决方案1】:

    试试这个代码。要获取给定子级的父级,请使用 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]]]
    

    【讨论】:

    • 感谢@slavik 的回复,但是如果我有其中一位父亲的名字,我可以雕刻您的孩子吗?
    • 谢谢@slavik,我已经看到了,但是如果你想让每个父亲都有他们的孩子而不是所有的子孩子?抱歉重复要求,但我有这个问题好几天了。:D
    • child 属性包含特定 Example 对象的所有子项。我不明白这个问题。你能举个例子,你想实现什么。
    • 我添加了getAllChildrenFor 方法,该方法对于给定的父名称返回其所有子项
    • 我必须在 this 这样的两个级别上创建这样的菜单。当我单击重新加载相同片段但作为标题传递子项的子项时,以及子项将如何扩展子项,因为列表视图最多有 2 个级别。不知道我解释的好不好。对不起我的英语。
    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多