CSV до JSON при весенней загрузке с несколькими типами записей - PullRequest
2 голосов
/ 03 февраля 2020

У меня есть требование для анализа файла CSV с 1 записью заголовка (без Имен), одной записью для множества подробностей и одной хвостовой записью (input.csv), которые необходимо преобразовать в выходной формат. json ,

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

В opencsv также есть отображение bean-компонента, но в нем нет средства для преобразования записи заголовка в отдельный Bean-компонент, детализации записей в массив отдельных bean-компонентов и хвостовой записи в другой отдельный bean-компонент.

http://opencsv.sourceforge.net/#reading_without_annotations_column_positions

Поэтому я застрял в том, чтобы произвести Json из CSV с записью заголовка, нескольких деталей и одного хвоста.

Может ли кто-нибудь поделиться некоторыми идеями для достижения этой цели?

input.csv

1,,,

2,DC PIV REL11,D6,

2,DC PIV REL12,ADDED VIA SFTP12,

2,D6,ADDED VIA SFTP6,

3,123,END

output. json

{
    "header": {
    "type": "1",
    "number": "",
    "code": ""
},
{
  "contents": {
    "content": [
      {
        "type": "2",
        "name": "DC PIV REL11",
        "reference": "D6"
      },
      {
        "type": "2",
        "name": "DC PIV REL12",
        "reference": "ADDED VIA SFTP12"
      },
      {
        "type": "2",
        "name": "D6",
        "reference": "ADDED VIA SFTP6"
      }
    ]
},
{ 
"tail": {
    "type": "3",
    "number": "123",
    "code": "END"
 }
}

1 Ответ

1 голос
/ 10 февраля 2020

Я нашел следующее решение.

Я создал 4 класса DTO Root, Header, Contents и Tail с соответствующими установщиками геттеров и использовал приведенный ниже код для решения проблемы.

Обратите внимание, я не добавил логика проверки c для проверки, является ли запись заголовком, содержимым или конечной записью в приведенном ниже коде, поскольку я предположил, что первая запись является заголовком последней, но одна запись является содержимым, а последняя запись является хвостом.

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

CSVReader reader = new CSVReader(new FileReader(classLoader.getResource("sample_file.txt").getFile()));


    List<String[]> records = reader.readAll();

    int count = 0;
    Header header = new Header();
    Contents contents = new Contents();
    Tail tail = new Tail();
    List<Content> contentList = new ArrayList<Content>();
    for (String[] record : records) {

        if (count == 0 ) {

            header.setRecordType(record[0]);
            header.setNumber(record[1]);
            header.setCode(record[2]);              
        } else if (count < (records.size() - 1)) {

            Content content = new Content();
            content.setRecordType(record[0]);
            content.setName(record[1]);
            content.setReference(record[2]);

            contentList.add(content);
        } else {

            tail.setRecordType(record[0]);
            tail.setNumber(record[1]);
            tail.setCode(record[2]);

        }
        count++;

    }
    contents.setContent(contentList);

    Root root = new Root();
    root.setHeader(header);
    root.setContents(contents);
    root.setTail(tail);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...