如何用java程序创建一个Hierarchical Json结构

时间:2013-12-11 11:15:47

标签: java json gson

我正在研发一代JSON。期望的结果是:

{
    "nodes": [
        {
            "name": "Jeet123",
            "type": 1,
            "slug": "",
            "entity": "company"
        }
    ],
    "links": [
        {
            "source": 0,
            "target": 1,
            "value": 1,
            "distance": 5
        }
    ]
}

这个JSON我必须做。我正在编写这个java代码..但它只显示{}

Entry1

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;

class Entry1 {

private String name;
private int type;
private String slug;
private String entity;

public String getName() {
    return name;
}

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

public int getType() {
    return type;
}

public void setType(int type) {
    this.type = type;
}

public String getSlug() {
    return slug;
}

public void setSlug(String slug) {
    this.slug = slug;
}

public String getEntity() {
    return entity;
}

public void setEntity(String entity) {
    this.entity = entity;
}
}

Entry2

class Entry2 {

private String source;
private String target;
private String value;
private String distance;

public String getSource() {
    return source;
}

public void setSource(String source) {
    this.source = source;
}

public String getTarget() {
    return target;
}

public void setTarget(String target) {
    this.target = target;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

public String getDistance() {
    return distance;
}

public void setDistance(String distance) {
    this.distance = distance;
}
}

EntryListContainer

class EntryListContainer {

public List<Entry1> nodes;
public List<Entry2> links;

public void setEntryList1(List<Entry1> entryList1) {
    this.nodes = nodes;
}

public List<Entry1> getEntryList1() {

    return nodes;
}

public void setEntryList2(List<Entry2> entryList1) {
    this.links = links;
}

public List<Entry2> getEntryList2() {

    return links;
}

}

LinkJson

public class LinkJson {

public static void main(String[] args) {

    EntryListContainer container = new EntryListContainer();

    List<Entry1> entryList1 = new ArrayList<>();
    List<Entry2> entryList2 = new ArrayList<>();

    Entry1 entry1 = new Entry1();

    entry1.setName("Jeet123");
    entry1.setType(1);
    entry1.setSlug("");
    entry1.setEntity("company");

    entryList1.add(entry1);

    Entry2 entry2 = new Entry2();

    entry2.setSource("0");
    entry2.setTarget("1");
    entry2.setValue("1");
    entry2.setDistance("5");

    entryList2.add(entry2);

    container.setEntryList1(entryList1);
    container.setEntryList2(entryList2);

    Gson gson = new Gson();

    System.out.println(gson.toJson(container));

  }

}

3 个答案:

答案 0 :(得分:1)

EntryListContainer类创建构造函数:

class EntryListContainer {

    private List<Entry1> nodes;
    private List<Entry2> links;

    public EntryListContainer(List<Entry1> nodes, List<Entry2> links) {
        this.nodes = nodes;
        this.links = links;
    }
}

然后以这种方式创建container对象:

EntryListContainer container = new EntryListContainer(entryList1,entryList2);

然后创建json:

  Gson gson = new Gson();

  System.out.println(gson.toJson(container));

编辑:无需使用构造函数

EntryListContainer课程中更改以下方法,它将起作用:

public void setEntryList1(List<Entry1> entryList1) {
        this.nodes = entryList1;
    }

public void setEntryList2(List<Entry2> entryList2) {
        this.links = entryList2;
    }

答案 1 :(得分:1)

糟糕的复制/粘贴!

public void setEntryList2(List<Entry2> entryList1) {
        this.links = links;
    }

    public void setEntryList1(List<Entry1> entryList1) {
        this.nodes = nodes;
    }

你应该有这个:

public void setEntryList2(List<Entry2> links) {
    this.links = links;
}

public void setEntryList1(List<Entry1> nodes) {
    this.nodes = nodes;
}

答案 2 :(得分:1)

通常解析JSON获取属性的方法是在代码中找到属性名称(nodeslinks),然后将第一个字母大写并附加get个字在前面尝试使用getter方法。基本上,您的EntryListContainer不遵循JSON(和代理的GSON)所依赖的Java Bean Conventions。 所以它没有打印任何东西,因为你没有getNodesgetLinks的getter方法,你有getEntryList1getEntryList2

我很确定你的EntryListContainer类需要看起来像这样:

class EntryListContainer {

    public List<Node> nodes;
    public List<Link> links;

    public void setNodes(final List<Node> nodes) {
        this.nodes = nodes;
    }

    public List<Node> getNodes() {
        return this.nodes;
    }

    public void setLinks(final List<Link> links) {
        this.links = links;
    }

    public List<Link> getLinks() {
        return this.links;
    }

}