简体   繁体   中英

json to table structure api in Java

I have been searching in internet for a while to get a API that convert json into tabular format. I don't have any code which I tried. Please direct me if you have any idea about it.

Eg : Json

{"name":"rinu","age":"14","Phone":[{"countryCode":91,"number":"99862656"},{"countryCode":91,"number":"675432"}],"OtherDetails":[{"Active":true}]}

Output can be(with any separated)

rinu|14|91|99862656|true
rinu|14|91|675432|true

I don't want any ready-made stuff, If I get anything similar to this, I can re-write it.

You might need this:

JacksonRead.java

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import org.codehaus.jackson.map.ObjectMapper;

public class JacksonRead {
    public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();
        try {
            Example example = mapper.readValue(new File("d:\\user.json"),
                    Example.class);

            StringBuilder builder = new StringBuilder();
            int i = 0;
            for (Phone phone : example.getPhone()) {
                builder.append(example.getName()).append("|");
                builder.append(example.getAge()).append("|");
                builder.append(phone.getCountryCode()).append("|")
                        .append(phone.getNumber()).append("|")
                        .append(example.getOtherDetails().get(i).getActive())
                        .append("|");
                builder.append("\n");
            }
            File file = new File("d:\\user.txt");

            // if file doesnt exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(builder.toString());
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Example.java

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

import org.codehaus.jackson.annotate.JsonProperty;

public class Example {

    @JsonProperty("name")
    private String name;
    @JsonProperty("age")
    private String age;
    @JsonProperty("Phone")
    private List<Phone> Phone = new ArrayList<Phone>();
    @JsonProperty("OtherDetails")
    private List<OtherDetail> OtherDetails = new ArrayList<OtherDetail>();

    /**
     * 
     * @return The name
     */
    @JsonProperty("name")
    public String getName() {
        return name;
    }

    /**
     * 
     * @param name
     *            The name
     */
    @JsonProperty("name")
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 
     * @return The age
     */
    @JsonProperty("age")
    public String getAge() {
        return age;
    }

    /**
     * 
     * @param age
     *            The age
     */
    @JsonProperty("age")
    public void setAge(String age) {
        this.age = age;
    }

    /**
     * 
     * @return The Phone
     */
    @JsonProperty("Phone")
    public List<Phone> getPhone() {
        return Phone;
    }

    /**
     * 
     * @param Phone
     *            The Phone
     */
    @JsonProperty("Phone")
    public void setPhone(List<Phone> Phone) {
        this.Phone = Phone;
    }

    /**
     * 
     * @return The OtherDetails
     */

    @JsonProperty("OtherDetails")
    public List<OtherDetail> getOtherDetails() {
        return OtherDetails;
    }

    /**
     * 
     * @param OtherDetails
     *            The OtherDetails
     */

    @JsonProperty("OtherDetails")
    public void setOtherDetails(List<OtherDetail> OtherDetails) {
        this.OtherDetails = OtherDetails;
    }

    @Override
    public String toString() {
        return "Example [name=" + name + ", age=" + age + ", Phone=" + Phone
                + ", OtherDetails=" + OtherDetails + "]";
    }

}

Phone.java

import org.codehaus.jackson.annotate.JsonProperty;

public class Phone {

    @JsonProperty("countryCode")
    private Integer countryCode;
    @JsonProperty("number")
    private String number;

    /**
     * 
     * @return The countryCode
     */
    @JsonProperty("countryCode")
    public Integer getCountryCode() {
        return countryCode;
    }

    /**
     * 
     * @param countryCode
     *            The countryCode
     */
    @JsonProperty("countryCode")
    public void setCountryCode(Integer countryCode) {
        this.countryCode = countryCode;
    }

    /**
     * 
     * @return The number
     */
    @JsonProperty("number")
    public String getNumber() {
        return number;
    }

    /**
     * 
     * @param number
     *            The number
     */
    @JsonProperty("number")
    public void setNumber(String number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "Phone [countryCode=" + countryCode + ", number=" + number + "]";
    }
}

OtherDetail.java

import org.codehaus.jackson.annotate.JsonProperty;

public class OtherDetail {

    @JsonProperty("Active")
    private Boolean Active;

    /**
     * 
     * @return The Active
     */
    @JsonProperty("Active")
    public Boolean getActive() {
        return Active;
    }

    /**
     * 
     * @param Active
     *            The Active
     */
    @JsonProperty("Active")
    public void setActive(Boolean Active) {
        this.Active = Active;
    }

    @Override
    public String toString() {
        return "OtherDetail [Active=" + Active + "]";
    }

}

user.json

{"name":"rinu","age":"14","Phone":[{"countryCode":91,"number":"99862656"},{"countryCode":91,"number":"675432"}],"OtherDetails":[{"Active":true}]}

I tried the library json2flat with the json

{"name":"rinu","age":"14","Phone":[{"countryCode":91,"number":"99862656"},{"countryCode":91,"number":"675432"}],"OtherDetails":[{"Active":true}]}

it gives a CSV like ::

rinu|14|91|99862656|
rinu|14|91|675432  |
rinu|  |  |        |true

But if you tweak the json a little bit like ::

{"name":"rinu","age":"14","Phone":[{"countryCode":91,"number":"99862656","Active":true},{"countryCode":91,"number":"675432","Active":true}]}

it gives the csv exactly as you require.

rinu|14|91|99862656|true
rinu|14|91|675432|true

Give it a try. After all the solution depends upon how the user wants to interpret the json.

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