Arlet09 :
I want to convert a JSON
file into a CSV
file.
My JSON
file comes from a DataBase
stored in Firebase
and has an structure like this:
{
"PATIENT" : {
"-LbhwHC7Y6_umc" : {
"age" : 31,
"name" : "Phoebe"
},
"-LbhwTFJ6xjEf" : {
"age" : 20,
"name" : "Amy"
},
"-LbhxUmJ_dwIC" : {
"age" : 28,
"name" : "Joe"
}
}
}
I'm trying to do it with Gson
:
package Parser;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
Gson gson = new Gson();
try {
BufferedReader br = new BufferedReader(
new FileReader("c:\\file.json"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
My problem is that I don't know how to create a JSON
object with random fields like:
"-LbhwHC7Y6_umc", "-LbhwTFJ6xjEf" and "-LbhxUmJ_dwIC"
generated by Firebase
Michał Ziober :
Using Jackson
library you have already mapper for JSON
and CSV
in one library. Simple example which reads your JSOn
and generate CSV
:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SequenceWriter;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.File;
import java.io.IOException;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
// read JSON
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(jsonFile);
JsonNode patient = root.get("PATIENT");
// Write CSV
CsvMapper csvMapper = new CsvMapper();
CsvSchema schema = CsvSchema.builder()
.addColumn("age", CsvSchema.ColumnType.NUMBER)
.addColumn("name")
.setUseHeader(true)
.build();
try (SequenceWriter sequenceWriter = csvMapper.writer().with(schema).writeValues(System.out)) {
patient.elements().forEachRemaining(node -> {
try {
sequenceWriter.write(node);
} catch (IOException e) {
throw new IllegalStateException(e);
}
});
}
}
}
Prints:
age,name
31,Phoebe
20,Amy
28,Joe
Generally, when you have random keys in JSON
payload you can deserialise it to Map<String, Object>
in Jackson
and Gson
libraries.
See aslo: