亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 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。它非常易于使用且功能強大?,F在我能夠解決這個庫的所有問題。(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 關注
  • 258 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號