Try it yourself with our free Json To Csv tool — runs entirely in your browser, no signup needed.

How to Convert CSV to JSON in Java

How to convert CSV to JSON in Java

Converting CSV (Comma Separated Values) to JSON (JavaScript Object Notation) is a common task in data processing and integration. CSV is a widely used format for exchanging data between systems, while JSON is a popular format for data exchange and storage. In Java, converting CSV to JSON can be achieved using various libraries and techniques. In this article, we will explore a practical approach to converting CSV to JSON in Java, covering common use cases, edge cases, and performance tips.

Quick Example

Here is a minimal example that converts a CSV file to a JSON string using the popular OpenCSV library:

import com.opencsv.CSVReader;
import com.opencsv.CSVReaderBuilder;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.FileReader;
import java.io.IOException;

public class CSVtoJSON {
    public static void main(String[] args) throws IOException {
        CSVReader reader = new CSVReaderBuilder(new FileReader("input.csv"))
                .withSkipLines(1) // skip header
                .build();

        JSONArray jsonArray = new JSONArray();
        String[] nextLine;
        while ((nextLine = reader.readNext()) != null) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("name", nextLine[0]);
            jsonObject.put("age", nextLine[1]);
            jsonArray.put(jsonObject);
        }

        System.out.println(jsonArray.toString());
    }
}

This example assumes a CSV file with two columns: name and age. The resulting JSON array will contain objects with these two properties.

Step-by-Step Breakdown

Let's walk through the code:

  1. We import the necessary libraries: OpenCSV for reading CSV files and JSON-Java for working with JSON data.
  2. We create a CSVReader instance, specifying the input file and skipping the header line.
  3. We create an empty JSONArray to store the converted data.
  4. We read the CSV file line by line, creating a JSONObject for each row.
  5. We add the name and age properties to the JSONObject using the corresponding values from the CSV row.
  6. We add the JSONObject to the JSONArray.
  7. Finally, we print the resulting JSON array to the console.

Handling Edge Cases

Empty/Null Input

When dealing with empty or null input, it's essential to handle these cases to avoid NullPointerExceptions or unexpected behavior. Here's an example:

if (nextLine == null || nextLine.length == 0) {
    // handle empty or null input
    continue;
}

Invalid Input

Invalid input, such as malformed CSV data, can cause errors during parsing. We can use try-catch blocks to handle such cases:

try {
    // parse CSV data
} catch (IOException e) {
    // handle invalid input
}

Large Input

When dealing with large CSV files, it's crucial to process the data in chunks to avoid memory issues. We can use a BufferedReader to read the file in chunks:

BufferedReader reader = new BufferedReader(new FileReader("input.csv"));
String line;
while ((line = reader.readLine()) != null) {
    // process line
}

Unicode/Special Characters

When dealing with Unicode or special characters, it's essential to ensure that the CSV reader and JSON writer can handle these characters correctly. We can use the UTF-8 encoding to handle Unicode characters:

CSVReader reader = new CSVReaderBuilder(new FileReader("input.csv", "UTF-8"))
                .build();

Common Mistakes

1. Not Skipping the Header Line

Forgetting to skip the header line can result in incorrect data. Corrected code:

CSVReader reader = new CSVReaderBuilder(new FileReader("input.csv"))
                .withSkipLines(1) // skip header
                .build();

2. Not Handling Null Values

Not handling null values can cause NullPointerExceptions. Corrected code:

if (nextLine == null || nextLine.length == 0) {
    // handle empty or null input
    continue;
}

3. Not Closing the Reader

Not closing the reader can cause resource leaks. Corrected code:

try (CSVReader reader = new CSVReaderBuilder(new FileReader("input.csv"))
        .build()) {
    // use reader
} // reader is automatically closed

Performance Tips

1. Use a BufferedReader

Using a BufferedReader can improve performance when reading large files.

BufferedReader reader = new BufferedReader(new FileReader("input.csv"));

2. Use a JSON Streaming API

Using a JSON streaming API, such as JSON-Java's JSONWriter, can improve performance when writing large JSON data.

JSONWriter writer = new JSONWriter();
writer.write(jsonArray);

3. Avoid Creating Unnecessary Objects

Avoid creating unnecessary objects, such as intermediate String objects, to reduce memory allocation and garbage collection.

jsonObject.put("name", nextLine[0]);
// instead of
String name = nextLine[0];
jsonObject.put("name", name);

FAQ

Q: What is the best library for reading CSV files in Java?

A: OpenCSV is a popular and widely-used library for reading CSV files in Java.

Q: How do I handle Unicode characters in CSV files?

A: Use the UTF-8 encoding when reading CSV files to handle Unicode characters correctly.

Q: What is the most efficient way to write JSON data in Java?

A: Use a JSON streaming API, such as JSON-Java's JSONWriter, to write JSON data efficiently.

Q: How do I handle large CSV files?

A: Process large CSV files in chunks using a BufferedReader to avoid memory issues.

Q: What is the best way to handle null values in CSV files?

A: Use try-catch blocks to handle null values and avoid NullPointerExceptions.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp