有没有办法通过json schema将映射转换成json字符串?我需要通过json schema来做这件事,因为我不知道map中的对象是字符串还是数字。例如,我的csv如下所示:
name, year
1 , 1
我需要将其转换为json字符串"{'name': '1', 'year': 1}"
,只有通过json模式,我才能知道1是字符串(在名称的情况下)还是数字(在年份的情况下)。
发布于 2019-03-11 17:30:38
你可以使用Jackson来尝试这样的东西:
您唯一需要自己实现的是第二个方法,它将CsvSchema.json转换为包含列名和列类型的映射。
public String generateJsonFromCSV() throws IOException {
File csvFile = new File("path/to/csv/mycsv.csv");
File schemaJson = new File("path/to/json/schema.json");
Map<String, CsvSchema.ColumnType> map = getSchemaMapFromJson(schemaJson);
CsvSchema.Builder schemaBuilder = new CsvSchema.Builder();
map.forEach(schemaBuilder::addColumn);
CsvSchema schema = schemaBuilder.build();
CsvMapper csvMapper = new CsvMapper();
MappingIterator<Map<?, ?>> mappingIterator = csvMapper.readerFor(Map.class).with(schema).readValues(csvFile);
String json = new ObjectMapper().writeValueAsString(mappingIterator.readAll());
return json;
}
//Convert your JsonSchema to Map<String,CsvSchema.ColumnType>
private Map<String, CsvSchema.ColumnType> getSchemaMapFromJson(File file) {
return new HashMap<>();
}
依赖关系:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>${jackson.version}</version>
</dependency>
发布于 2019-03-09 00:51:20
杰克逊有一份module to parse CSV文件。假设您的项目中已经有Jackson依赖项,则需要根据需要添加以下内容:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>${jackson.version}</version>
</dependency>
然后创建一个类来定义您的模式并保存这些值(请注意@JsonPropertyOrder
注释,因为它定义了CSV列的顺序):
@JsonPropertyOrder({"name", "year"})
public class Person {
private String name;
private Integer year;
// Getters and setters
}
将CSV文档解析为列表,最后将列表写入JSON字符串:
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(Person.class).withHeader();
MappingIterator<Object> iterator = mapper.readerFor(Person.class)
.with(schema).readValues(new FileInputStream("/path/to/the/csv/file"));
String json = new ObjectMapper().writeValueAsString(iterator.readAll());
发布于 2019-03-08 22:25:42
您可以使用org.json库:
Map<String, Object> map = new HashMap<>();
map.put("name", "1");
map.put("year", 1);
org.json.JSONObject obj = new org.json.JSONObject(map);
System.out.println(obj.toString());
输出:
{"year":1,"name":"1"}
https://stackoverflow.com/questions/55064706
复制相似问题