Преобразование строки CSV в Map с двойными кавычками ключей / значений - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю над преобразованием строки CSV в Map.Я могу преобразовать его, но проблема в том, что мне нужно получить ключи и значения в Map с двойными кавычками ""

строка ввода: "fname", "lname", ...... \ n "ramprakash", "seepana", ...

Получение данных [fname = ramprakash, lname = seepana, ...]

Ожидаемые данные: ["fname"=" ramprakash "," lname "=" seepana ", ...]

Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Предположим, ваш CSV выглядит следующим образом:

"fname", "lname"
"ramprakash","seepana"
"ramprakash1","seepana1"

Чтобы иметь ", вам необходимо отключить в CsvSchema кавычку char.Пример:

import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;

import java.io.File;
import java.util.Map;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File csv = new File("./resource/test.csv").getAbsoluteFile();

        CsvMapper mapper = new CsvMapper();

        CsvSchema schema = CsvSchema
                .emptySchema()
                .withHeader()
                .withColumnSeparator(',')
                .withoutQuoteChar();

        MappingIterator<Map<String, String>> it = mapper
                .readerFor(Map.class)
                .with(schema)
                .readValues(csv);


        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

Над отпечатками кода:

{"fname"="ramprakash", "lname"="seepana"}
{"fname"="ramprakash1", "lname"="seepana1"}
0 голосов
/ 20 февраля 2019

Для обработки CSV univocity-parser - ваш лучший выбор.Это также быстрее , чем любой другой парсер.

Попробуйте этот код:

String input = "'fname','lname'\n'ramprakash','seepana'\n";

CsvParserSettings settings = new CsvParserSettings(); //many options here, check the tutorial
settings.setHeaderExtractionEnabled(true); //use first row as headers
settings.getFormat().setQuote('\''); //using single quotes for clarity

settings.setKeepQuotes(true); //keep the quotes

CsvParser parser = new CsvParser(settings);
for (Record record : parser.iterateRecords(new StringReader(input))) {
    Map<String, String> map = record.toFieldMap();
    System.out.println(map);
}

Вывод:

{fname='ramprakash', lname='seepana'}

Надеюсь, это поможет

РЕДАКТИРОВАТЬ:

Я только что заметил, заголовки не будут заключены в кавычки (как правило, это то, что люди хотят).Вы все еще можете получить все с кавычками в виде простых строк и заполнить карту самостоятельно:

    String input = "'fname','lname'\n'ramprakash','seepana'\n'I won\\'t go away'";

    CsvParserSettings settings = new CsvParserSettings();
    settings.getFormat().setQuote('\'');
    settings.getFormat().setQuoteEscape('\\'); //added escape quote character too

    settings.setKeepQuotes(true);
    settings.setKeepEscapeSequences(true); //you probably want this

    CsvParser parser = new CsvParser(settings);
    for (String[] row: parser.iterate(new StringReader(input))) {
        System.out.println(Arrays.toString(row));
    }

Это напечатает:

['fname', 'lname']
['ramprakash', 'seepana']
['I won\'t go away']

Раскрытие информации: я являюсь автором этой библиотеки.Это с открытым исходным кодом и бесплатно (лицензия Apache V2.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...