4 回答

TA贡献1856条经验 获得超17个赞
Jackson 有一个解析 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());

TA贡献1802条经验 获得超5个赞
您可以使用 Jackson 尝试这样的事情:
您唯一需要自己实现的是将 CsvSchema.json 转换为包含列名和列类型的 Map 的第二种方法。
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>

TA贡献1719条经验 获得超6个赞
您可以使用 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"}

TA贡献1780条经验 获得超5个赞
您可以使用 GSON。它非常易于使用且功能强大。现在我能够解决这个库的所有问题。(https://github.com/google/gson)
// your map
Map<String, Object> map = new HashMap<>();
map.put("name", "1");
map.put("year", 1);
// create Gson instance
Gson gson = new GsonBuilder().create();
// convert to JSON
String jsonString = gson.toJson(map);
// convert back to map
Map map = gson.fromJson(jsonString, Map.class);
添加回答
举报