JSON對象是否有一個開源的Java庫來轉換CSV(或XLS)文件的JSON對象?我嘗試使用json.cdl(http://bethecoder.com/applications/tutorials/json/json-java/csv-to-jsonarray.html),但不知何故似乎不適用於大型CSS字符串。我試圖找到像http://www.cparker15.com/code/utilities/csv-to-json/,但用java編寫的東西。任何幫助表示讚賞。謝謝!轉換一個CSV文件在Java
回答
您可以使用打開CSV到CSV映射到Java Bean中,然後使用JAXB的Java Bean的轉換成JSON對象。
如果CSV是簡單的,那麼這是很容易通過手工編寫 - 但CSV可以包括討厭的邊緣例報價,遺漏值等
- 加載使用
BufferedReader.readLine()
- 使用
String.split(",")
獲得每行的值的文件 - NB這種做法只會窩k正確如果你的值沒有逗號! - 每個值寫入使用
BufferedWriter
- 必要的JSON括號和引用輸出
你可能想使用一個CSV庫,然後「手」
轉換成JSON@Mscellaneous基本上爲你解答了這個問題,所以請給他信用。
這裏是我想出了:
package edu.apollogrp.csvtojson;
import au.com.bytecode.opencsv.bean.CsvToBean;
import au.com.bytecode.opencsv.bean.HeaderColumnNameMappingStrategy;
import org.codehaus.jackson.map.ObjectMapper;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
public class ConvertCsvToJson {
public static void main(String[] args) throws IOException, ClassNotFoundException {
if (args.length > 1) {
String pathToCsvFile = args[0];
String javaBeanClassName = "edu.apollogrp.csvtojson.bean." + args[1];
final File file = new File(pathToCsvFile);
if (!file.exists()) {
System.out.println("The file you specified does not exist. path=" + pathToCsvFile);
}
Class<?> type = null;
try {
type = Class.forName(javaBeanClassName);
} catch (ClassNotFoundException e) {
System.out.println("The java bean you specified does not exist. className=" + javaBeanClassName);
}
HeaderColumnNameMappingStrategy strat = new HeaderColumnNameMappingStrategy();
strat.setType(type);
CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, new InputStreamReader(new FileInputStream(file)));
System.out.println(new ObjectMapper().writeValueAsString(list));
} else {
System.out.println("Please specify the path to the csv file.");
}
}
}
我使用Maven來包括依賴關係,但你也可以手動下載它們,並將它們包括在類路徑中。
<dependency>
<groupId>net.sf.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.12</version>
</dependency>
我在此使用Excel文件code.you可以使用CSV。 我已經寫了這個類爲特定的Excel/csv格式,這是我所知道的。
import java.io.File;
public class ReadExcel {
private String inputFile;
public void setInputFile(String inputFile) {
this.inputFile = inputFile;
}
public void read() throws IOException {
File inputWorkbook = new File(inputFile);
Workbook w;
try {
w = Workbook.getWorkbook(inputWorkbook);
// Get the first sheet
Sheet sheet = w.getSheet(0);
// Loop over first 10 column and lines
int columns = sheet.getColumns();
int rows = sheet.getRows();
ContactList clist = new ContactList();
ArrayList<Contact> contacts = new ArrayList<Contact>();
for (int j = 1; j < rows; j++) {
Contact contact = new Contact();
for (int i = 0; i < columns; i++) {
Cell cell = sheet.getCell(i, j);
switch (i) {
case 0:
if (!cell.getContents().equalsIgnoreCase("")) {
contact.setSrNo(Integer.parseInt(cell.getContents()));
} else {
contact.setSrNo(j);
}
break;
case 1:
contact.setName(cell.getContents());
break;
case 2:
contact.setAddress(cell.getContents());
break;
case 3:
contact.setCity(cell.getContents());
break;
case 4:
contact.setContactNo(cell.getContents());
break;
case 5:
contact.setCategory(cell.getContents());
break;
}
}
contacts.add(contact);
}
System.out.println("done");
clist.setContactList(contacts);
JSONObject jsonlist = new JSONObject(clist);
File f = new File("/home/vishal/Downloads/database.txt");
FileOutputStream fos = new FileOutputStream(f, true);
PrintStream ps = new PrintStream(fos);
ps.append(jsonlist.toString());
} catch (BiffException e) {
e.printStackTrace();
System.out.println("error");
}
}
public static void main(String[] args) throws IOException {
ReadExcel test = new ReadExcel();
test.setInputFile("/home/vishal/Downloads/database.xls");
test.read();
}
}
我已經使用jxl.jar爲Excel閱讀
什麼是'Workbook','Sheet'和'ContactList'類? – 2014-11-05 20:58:52
我不知道這個類的描述,當我導入jxl.jar文件時,我從這個庫中獲得了這些類。如果你想要我會提供後續的細節。謝謝 – 2014-11-06 09:16:55
這是我的Java程序,並希望有人發現它有用。
格式需要是這樣的:
「的符號,日期,CLOSE_PRICE,OPEN_PRICE,HIGH_PRICE,LOW_PRICE,體積,ADJ_CLOSE
AAIT,2015年2月26日00:00:00.000,-35.152 ,0,35.152,35.12,679,0
AAL,2015年2月26日00:00:00.000,49.35,50.38,50.38,49.02,7572135,0"
第一行是列標題。任何地方都沒有引號。用逗號分隔而不用分號。你得到了這筆交易。
/* Summary: Converts a CSV file to a JSON file.*/
//import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
public class CSVtoJSON extends JFrame{
private static final long serialVersionUID = 1L;
private static File CSVFile;
private static BufferedReader read;
private static BufferedWriter write;
public CSVtoJSON(){
FileNameExtensionFilter filter = new FileNameExtensionFilter("comma separated values", "csv");
JFileChooser choice = new JFileChooser();
choice.setFileFilter(filter); //limit the files displayed
int option = choice.showOpenDialog(this);
if (option == JFileChooser.APPROVE_OPTION) {
CSVFile = choice.getSelectedFile();
}
else{
JOptionPane.showMessageDialog(this, "Did not select file. Program will exit.", "System Dialog", JOptionPane.PLAIN_MESSAGE);
System.exit(1);
}
}
public static void main(String args[]){
CSVtoJSON parse = new CSVtoJSON();
parse.convert();
System.exit(0);
}
private void convert(){
/*Converts a .csv file to .json. Assumes first line is header with columns*/
try {
read = new BufferedReader(new FileReader(CSVFile));
String outputName = CSVFile.toString().substring(0,
CSVFile.toString().lastIndexOf(".")) + ".json";
write = new BufferedWriter(new FileWriter(new File(outputName)));
String line;
String columns[]; //contains column names
int num_cols;
String tokens[];
int progress = 0; //check progress
//initialize columns
line = read.readLine();
columns = line.split(",");
num_cols = columns.length;
write.write("["); //begin file as array
line = read.readLine();
while(true) {
tokens = line.split(",");
if (tokens.length == num_cols){ //if number columns equal to number entries
write.write("{");
for (int k = 0; k < num_cols; ++k){ //for each column
if (tokens[k].matches("^-?[0-9]*\\.?[0-9]*$")){ //if a number
write.write("\"" + columns[k] + "\": " + tokens[k]);
if (k < num_cols - 1) write.write(", "); }
else { //if a string
write.write("\"" + columns[k] + "\": \"" + tokens[k] + "\"");
if (k < num_cols - 1) write.write(", ");
}
}
++progress; //progress update
if (progress % 10000 == 0) System.out.println(progress); //print progress
if((line = read.readLine()) != null){//if not last line
write.write("},");
write.newLine();
}
else{
write.write("}]");//if last line
write.newLine();
break;
}
}
else{
//line = read.readLine(); //read next line if wish to continue parsing despite error
JOptionPane.showMessageDialog(this, "ERROR: Formatting error line " + (progress + 2)
+ ". Failed to parse.",
"System Dialog", JOptionPane.PLAIN_MESSAGE);
System.exit(-1); //error message
}
}
JOptionPane.showMessageDialog(this, "File converted successfully to " + outputName,
"System Dialog", JOptionPane.PLAIN_MESSAGE);
write.close();
read.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
需要搖擺,但配備了一個漂亮的小GUI所以那些誰知道絕對沒有Java可以使用一次打包成一個可執行的.jar。隨意改善它。謝謝StackOverflow幫助我這麼多年。
如果您使用的是Java 8,你可以做這樣的事情。無需庫或複雜的邏輯。
首先,創建代表新的JSON對象POJO。在我的例子中,它被稱爲'YourJSONObject',並有一個構造函數帶兩個字符串。
什麼代碼所做的是首先讀取該文件,然後創建一個基於字符串的行流。 (一行相當於CSV文件中的一行)。
我們再通過線到其將它放在一個逗號地圖功能,然後創建YourJSONObject。
所有這些對象,然後收集我們在傳遞給JSONArray構造函數列表。
你現在有一個JSONObjects數組。如果你想看到這個文本表示,你可以在這個對象上調用toString()。
JSONArray objects = new JSONArray(Files.readAllLines(Paths.get("src/main/resources/your_csv_file.csv"))
.stream()
.map(s -> new YourJSONObject(s.split(",")[0], s.split(",")[1]))
.collect(toList()));
舊帖子,但我想我會分享我自己的解決方案。它假設報價用於價值逗號周圍。它也刪除所有報價後。
此方法接受CSV格式的字符串。因此,它假定您已經將CSV文件讀取爲字符串。確保您在閱讀時沒有移除NextLine字符('\ n')。
這種方法並不完美,但它可能是您正在尋找的純java中的快速單方法解決方案。
public String CSVtoJSON(String output) {
String[] lines = output.split("\n");
StringBuilder builder = new StringBuilder();
builder.append('[');
String[] headers = new String[0];
//CSV TO JSON
for (int i = 0; i < lines.length; i++) {
String[] values = lines[i].replaceAll("\"", "").split("۞");
if (i == 0) //INDEX LIST
{
headers = values;
} else {
builder.append('{');
for (int j = 0; j < values.length && j < headers.length; j++) {
String jsonvalue = "\"" + headers[j] + "\":\"" + values[j] + "\"";
if (j != values.length - 1) { //if not last value of values...
jsonvalue += ',';
}
builder.append(jsonvalue);
}
builder.append('}');
if (i != lines.length - 1) {
builder.append(',');
}
}
}
builder.append(']');
output = builder.toString();
return output;
}
- 1. 轉換CSV文件,JSON在Java
- 2. 轉換(CSV)文件的JSONObject的Java
- 3. 轉換多個TSV文件到一個CSV文件
- 4. 轉換一個 「AB [C] d」 格式的文件到CSV文件
- 5. 轉換csv.DictReader到CSV文件
- 6. 轉換CSV文件以NSDictionaries
- 7. 轉換.CSV文件到.XML
- 8. Summary.glm轉換爲CSV文件?
- 9. 將多個CSV文件轉換爲ARFF java
- 10. 轉換CSV文件到墊子文件
- 11. 新手在Clojure中轉換CSV文件
- 12. Java文件轉換
- 13. 使用一個XSL轉換將CSV文件轉換爲分層XML
- 14. XML到CSV轉換Java
- 15. CSV到XML的轉換Java
- 16. 文本CSV轉換
- 17. 轉換CSV文件到一個數組結構
- 18. 讀一個CSV文件將字符串轉換爲浮動
- 19. 如何將一個txt文件轉換爲csv
- 20. 轉換文本文件到csv Python的
- 21. 轉換一個文件到另一個
- 22. 轉換文本文件,XML在java中
- 23. 如何將XML文件轉換爲C#中的一個CSV文件?
- 24. 如何使用Java將.txt文件轉換爲.csv?
- 25. 將CSV文件轉換爲Java - 向後複製
- 26. 簡單的CSV到SQL的Java文件轉換器
- 27. 轉換逗號分隔的CSV文件選項卡用java
- 28. Java庫或應用程序將CSV轉換爲XML文件?
- 29. Java編寫的列表字符串轉換成csv文件
- 30. 將.csv轉換/分析爲xlsx文件
可能不是_exact_重複,因爲它專門要求Java解決方案。 – DNA 2012-03-01 21:22:50