使用随机字段解析JSON(java) [英] Parsing JSON with a random field (java)
问题描述
我想将JSON
文件转换为CSV
文件.
I want to convert a JSON
file into a CSV
file.
我的JSON
文件来自存储在Firebase
中的DataBase
,并且具有如下结构:
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"
}
}
}
我正在尝试使用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();
}
}
}
我的问题是我不知道如何使用随机字段创建JSON
对象:
My problem is that I don't know how to create a JSON
object with random fields like:
-LbhwHC7Y6_umc",-LbhwTFJ6xjEf"和"-LbhxUmJ_dwIC"
"-LbhwHC7Y6_umc", "-LbhwTFJ6xjEf" and "-LbhxUmJ_dwIC"
由Firebase生成
generated by Firebase
推荐答案
使用Jackson
库,您已经在一个库中为JSON
和CSV
映射了.读取您的JSOn
并生成CSV
的简单示例:
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);
}
});
}
}
}
打印:
age,name
31,Phoebe
20,Amy
28,Joe
通常,当JSON
有效负载中具有随机密钥时,可以在Jackson
和Gson
库中将其反序列化为Map<String, Object>
.
Generally, when you have random keys in JSON
payload you can deserialise it to Map<String, Object>
in Jackson
and Gson
libraries.
请参见:
- jackson-dataformats-text - CSV
- jackson-databind - JSON
这篇关于使用随机字段解析JSON(java)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!