为了账号安全,请及时绑定邮箱和手机立即绑定

通过 json 模式将 map 转换为 json 字符串

通过 json 模式将 map 转换为 json 字符串

狐的传说 2022-07-27 10:00:19
有没有办法通过 json 模式将地图转换为 json 字符串?我需要通过 json 模式来做到这一点,因为我不知道地图中的对象是字符串还是数字。例如,我的 csv 看起来像这样:name, year1   , 1我需要将它转换为 json 字符串"{'name': '1', 'year': 1}",我只能通过 json 模式知道 1 是字符串(在名称的情况下)还是数字(在年份的情况下)。
查看完整描述

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());


查看完整回答
反对 回复 2022-07-27
?
慕后森

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>


查看完整回答
反对 回复 2022-07-27
?
慕侠2389804

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"}


查看完整回答
反对 回复 2022-07-27
?
翻阅古今

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);


查看完整回答
反对 回复 2022-07-27
  • 4 回答
  • 0 关注
  • 219 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号