首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过json schema将map转换为json字符串

通过json schema将map转换为json字符串
EN

Stack Overflow用户
提问于 2019-03-08 21:56:21
回答 5查看 1.3K关注 0票数 0

有没有办法通过json schema将映射转换成json字符串?我需要通过json schema来做这件事,因为我不知道map中的对象是字符串还是数字。例如,我的csv如下所示:

代码语言:javascript
运行
复制
name, year
1   , 1

我需要将其转换为json字符串"{'name': '1', 'year': 1}",只有通过json模式,我才能知道1是字符串(在名称的情况下)还是数字(在年份的情况下)。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-03-11 17:30:38

你可以使用Jackson来尝试这样的东西:

您唯一需要自己实现的是第二个方法,它将CsvSchema.json转换为包含列名和列类型的映射。

代码语言:javascript
运行
复制
     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<>();
    }

依赖关系:

代码语言:javascript
运行
复制
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-csv</artifactId>
    <version>${jackson.version}</version>
</dependency>
票数 1
EN

Stack Overflow用户

发布于 2019-03-09 00:51:20

杰克逊有一份module to parse CSV文件。假设您的项目中已经有Jackson依赖项,则需要根据需要添加以下内容:

代码语言:javascript
运行
复制
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-csv</artifactId>
    <version>${jackson.version}</version>
</dependency>

然后创建一个类来定义您的模式并保存这些值(请注意@JsonPropertyOrder注释,因为它定义了CSV列的顺序):

代码语言:javascript
运行
复制
@JsonPropertyOrder({"name", "year"})
public class Person {

    private String name;
    private Integer year;

    // Getters and setters   
}

将CSV文档解析为列表,最后将列表写入JSON字符串:

代码语言:javascript
运行
复制
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());
票数 2
EN

Stack Overflow用户

发布于 2019-03-08 22:25:42

您可以使用org.json库:

代码语言:javascript
运行
复制
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());

输出:

代码语言:javascript
运行
复制
{"year":1,"name":"1"}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55064706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档