#java #csv #delimiter
Вопрос:
Я преобразую JSONArray в csv-файл на java. Но у меня есть вложенный объект JSON в одном из столбцов, поэтому при чтении csv-файла порядок строк и индекс столбца путаются.
Это мой код:
public static String createCSV(JSONArray metrics) throws JSONException, IOException { String filePath = null; File file=new File("fromJSON.csv"); String csv = CDL.toString(metrics); FileUtils.writeStringToFile(file, csv); Path path = Paths.get("fromJSON.csv"); Path AbsPath = path.toAbsolutePath(); try { filePath = AbsPath.toString(); } catch (Exception e) { e.printStackTrace(); } return filePath; }
Должен ли я использовать здесь разделитель? Или есть ли какой-либо другой подход для решения этой проблемы?
Комментарии:
1. JSON вложен в CSV? Конечно… с таким же успехом мы могли бы завернуть все это в XML-конверт, закодировать в Base64, вставить в файл DOCX, а затем разархивировать его.
2. В чем именно здесь проблема? Третий столбец заключен в кавычки с ‘ , поэтому запятые внутри не рассматриваются как разделители полей. Каждая приличная библиотека CSV должна справиться с этим.
3. @vanje Довольно уверен, что в соответствии со спецификациями csv это должен быть символ двойной кавычки
"
, на самом деле. Как только вы это сделаете, все символы в двойных кавычках внутри должны быть экранированы путем их удвоения (до""
), и таким образом все запятые внутри полного блока в кавычках игнорируются. Как всегда, однако, если что-то не соответствует «обычным» спецификациям csv, вы можете просто поискать параметры синтаксического анализа, чтобы настроить подобные вещи, или написать свой собственный анализатор.4. Возможно, вам захочется на самом деле указать, что вы используете для преобразования файлов в csv. Единственный намек в коде-это какая-то неизвестная вещь
CDL
, которая каким-то образом беретJSONArray
объект и выводит csv.5. @Nyerguds: Да, вы правы. Символ двойной кавычки обычно используется для цитирования полей. Лучший подход-сначала получить спецификацию ожидаемого формата, такую как кодировка символов, разделитель и кавычки. А затем используйте библиотеку CSV для записи и чтения данных, чтобы библиотека автоматически обрабатывала экранирование и кавычки.