简体   繁体   中英

How to make a Hirarchical Json Structure with java program

I am working on a generation JSON. The desired result is:

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

This JSON i have to make. I am Writing this java code.. But it only shows {}

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

  }

}

Create Constructor for your EntryListContainer class:

class EntryListContainer {

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

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

And then create the container object this way:

EntryListContainer container = new EntryListContainer(entryList1,entryList2);

And then create the json:

  Gson gson = new Gson();

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

Edit : Not necessary to use the constructor,

Change the following methods in your EntryListContainer class and it will work:

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

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

Bad copy/paste !

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

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

You should have this :

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

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

The way JSON is usually parsed to get the properties is to find the property names ( nodes and links in your code) and then capitalise the first letter and append the get word onto the front to try and use the getter method. Basically your EntryListContainer doesn't follow the Java Bean Conventions that JSON (and GSON by proxy) relies on. So it didn't print anything because you had no getter method for getNodes or getLinks , you have getEntryList1 and getEntryList2

I'm pretty sure you EntryListContainer class needs to look like this:

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

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM