我的依賴不是第三方
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.4</version>
</dependency>
JSON陣列測驗
[{"name":"aondx","value":10,"date":"1999-01-09T14:30:53Z"}]
我能夠決議/寫入創建 csv 檔案,但問題是它在我的 csv 檔案中的格式不正確。
public static void writeFilteredJsonToNewFile(JsonArray jsonArray) {
try {
for (Object object : jsonArray) {
JsonObject obj = (JsonObject) object;
StringWriter writer = new StringWriter();
JsonWriter jsonWriter = Json.createWriter(writer);
jsonWriter.writeObject(obj);
writer.close();
FileWriter fileWriter = new FileWriter(diretory name ".csv");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(writer.toString());
bufferedWriter.close();
System.out.println("Created new File!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
結果
csv 檔案中的預期結果(表格格式)
姓名 | 價值 | 日期 |
---|---|---|
aondx | 40 | 1999-01-09T14:30:53Z |
uj5u.com熱心網友回復:
If my understanding is correct, you want to convert the json into csv file but while writing to csv you are getting key value in each row instead of key in the first row and then value in the subsequent rows.
I think if you follow below steps then you will able to achieve this:
1) First convert your Json into the List<Map<String,String>> using below code
> ObjectMapper mapper = new ObjectMapper();
> List<Map<String, Object>> datas = mapper.readValue(jsonArray.toString(), new
> TypeReference<List<Map<String, Object>>>(){});
2) Find the keys from the json, which will be used as your column, assuming all the data having same keys.
> Set<String> columns = datas.get(0).keySet(); write columns as the
> first row in the csv file.
3) Iterate over the datas list and start writing the value row wise.
正如您在評論中提到的,您不想使用外部庫而不是 ObjectMapper,您可以使用您的 JsonArray。
而不是將您的 json Array 轉換為 List<Map<String,String>> 并獲取密鑰,您可以僅對 JsonObject 執行相同的操作,因為它僅實作 Map。
Set<String> columns = jsonArray.get(0).keySet(); this code should be before you are starting the loop.
在回圈內,您正在遍歷 jsonArray,讀取 value 。
Set<String> columns = jsonArray.get(0).keySet(); for (Object object : jsonArray) { JsonObject obj = (JsonObject) object; List<String> dataRows = new ArrayList(); for(String column : columns ) { String value = (String)obj.get(column); dataRows.add(value); } ....... // write the value to file ....... }
如果您對完整解決方案感興趣,可以試試這個。
public static void writeFilteredJsonToNewFile(JsonArray jsonArray) { List<List<String>> allDatas = new ArrayList<>(); Set<String> columns = jsonArray.get(0).keySet(); allDatas.add(new ArrayList<>(columns)); for (Object object : jsonArray) { JsonObject obj = (JsonObject) object; List<String> dataRows = new ArrayList(); for(String column : columns ) { String value = (String)obj.get(column); dataRows.add(value); } allDatas.add(dataRows); } writeToCsvFile(allDatas,",","test-file.csv"); } public void writeToCsvFile(List<List<String>> thingsToWrite, String separator, String fileName){ try (FileWriter writer = new FileWriter(fileName)){ for (List<String> strings : thingsToWrite) { for (int i = 0; i < strings.size(); i ) { writer.append(strings[i]); if(i < (strings.length-1)) writer.append(separator); } writer.append(System.lineSeparator()); } writer.flush(); } catch (IOException e) { e.printStackTrace(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497247.html