{"id":15583503,"url":"https://github.com/osiegmar/javacsvcomparison","last_synced_at":"2025-10-11T07:41:46.802Z","repository":{"id":149740461,"uuid":"326436798","full_name":"osiegmar/JavaCsvComparison","owner":"osiegmar","description":"Comparison of parsing non-standard CSV data using different Java libraries.","archived":false,"fork":false,"pushed_at":"2025-10-03T08:39:24.000Z","size":258,"stargazers_count":5,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-03T10:12:21.338Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osiegmar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-01-03T15:20:36.000Z","updated_at":"2025-10-03T08:39:25.000Z","dependencies_parsed_at":"2024-11-01T14:20:34.800Z","dependency_job_id":"de9be24b-1db2-4bb1-b14c-95924c089050","html_url":"https://github.com/osiegmar/JavaCsvComparison","commit_stats":{"total_commits":29,"total_committers":2,"mean_commits":14.5,"dds":0.06896551724137934,"last_synced_commit":"01d6d258fa715d9a0df109dfdf825a4b0f0bfb67"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/osiegmar/JavaCsvComparison","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osiegmar%2FJavaCsvComparison","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osiegmar%2FJavaCsvComparison/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osiegmar%2FJavaCsvComparison/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osiegmar%2FJavaCsvComparison/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osiegmar","download_url":"https://codeload.github.com/osiegmar/JavaCsvComparison/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osiegmar%2FJavaCsvComparison/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006626,"owners_count":26084131,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T20:08:46.523Z","updated_at":"2025-10-11T07:41:46.786Z","avatar_url":"https://github.com/osiegmar.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Interpretation of the CSV Standard by Java Libraries\n\nUnfortunately, there is no real industry standard for CSV files.\nThe closest thing we do currently have (since 2005) is [RFC 4180](https://tools.ietf.org/html/rfc4180).\nWorking with non-standardized data often comes with surprises, but what exactly happens when parsing\nCSV data that doesn't match this RFC?\n\nThis project is about to find that out...\n\n\u003e [!NOTE]\n\u003e This project was created during the development of [FastCSV].\n\u003e Since this comparison uses the result of FastCSV as a reference value (expected result),\n\u003e the comparison is highly biased.\n\n## Test results\n\nThe [test suite](tests) consists of currently 60 tests in total.\nTo pass a test, the library must return the expected result or throw an exception if the input is invalid.\nIf the library lacks a feature (like skipping empty lines or comments), the test is marked as skipped.\nIf a test is neither passed nor skipped, it is marked as failed.\n\n| Library            | Checks passed |     Checks skipped |      Checks failed |\n|:-------------------|--------------:|-------------------:|-------------------:|\n| [Commons CSV]      |            48 | :heavy_minus_sign: |                 12 |\n| [CSVeed]           |            28 |                  7 |                 25 |\n| [FastCSV]          |            60 | :heavy_minus_sign: | :heavy_minus_sign: |\n| [Jackson CSV]      |            49 |                  7 |                  4 |\n| [Java CSV]         |            51 |                  7 |                  2 |\n| [Opencsv]          |            38 |                 17 |                  5 |\n| [picocsv]          |            60 | :heavy_minus_sign: | :heavy_minus_sign: |\n| [sesseltjonna-csv] |            30 |                 17 |                 13 |\n| [SimpleFlatMapper] |            41 |                 17 |                  2 |\n| [Super CSV]        |            49 |                  7 |                  4 |\n| [Univocity]        |            51 |                  7 |                  2 |\n\nA detailed report can be found at: https://osiegmar.github.io/JavaCsvComparison\n\nThe tests clearly show that there are significant differences between the libraries –\nespecially when it comes to non-standardized data.\n\n## Execute\n\nTo run the tests and generate the report locally, execute the following command:\n\n```shell\n./gradlew test allureAggregateServe\n```\n\n## Library Implementor?\n\nThe tests are written in a way that they can be easily adapted to other libraries and languages.\nThey can also be used as unit tests for your library, like done in [FastCSV].\n\nFeel free to use the tests for your own project.\n\n\n[Commons CSV]: https://commons.apache.org/proper/commons-csv/\n[CSVeed]: https://42bv.github.io/CSVeed/\n[FastCSV]: https://fastcsv.org\n[Jackson CSV]: https://github.com/FasterXML/jackson-dataformats-text\n[Java CSV]: https://sourceforge.net/projects/javacsv/\n[Opencsv]: https://opencsv.sourceforge.net\n[picocsv]: https://github.com/nbbrd/picocsv\n[sesseltjonna-csv]: https://github.com/skjolber/sesseltjonna-csv\n[SimpleFlatMapper]: https://simpleflatmapper.org\n[Super CSV]: https://super-csv.github.io/super-csv/index.html\n[Univocity]: https://github.com/uniVocity/univocity-parsers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosiegmar%2Fjavacsvcomparison","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosiegmar%2Fjavacsvcomparison","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosiegmar%2Fjavacsvcomparison/lists"}