Можно ли проанализировать строки CSV в JsonNodes, имеющие правильные типы значений - PullRequest
0 голосов
/ 18 сентября 2018

Легко разобрать CSV в List<Map<String,String>>, как описано в https://github.com/FasterXML/jackson-dataformats-text/tree/master/csv#with-column-names-from-first-row

Однако вывод типа должен быть сделан вручную. Например. как то, что я пытаюсь сделать ниже? * * * * * * * * * * * * * * * * * * * * * * * * * *

Мне кажется, что это глупость, потому что Джексон делает все это очень хорошо ... *1006*
CsvSchema schema = CsvSchema.emptySchema().withHeader();
CsvMapper mapper = new CsvMapper();

ObjectReader with = mapper.readerFor(ArrayNode.class).with(schema);
mapper.enable(CsvParser.Feature.WRAP_AS_ARRAY);
JsonNode readTree = with.readTree(new FileInputStream(file));

JsonNode jsonNode = arrayNode.get(0);
if (jsonNode.isObject()) {
    Iterator<Entry<String, JsonNode>> fields = jsonNode.fields();
    int counter = 0;
    while (fields.hasNext()) {
        Entry<String, JsonNode> entry = fields.next();
        JsonNode value = entry.getValue();
        if (value.isBoolean()) {
            // nah
        } else if (value.isNumber()) {
            // yeah
        } else if (value.isTextual()) {
            // nah
        }
    }
}

Можно ли проанализировать строки CSV в узлы Json, имеющие правильные типы значений, не полагаясь на POJO для их предоставления?

1 Ответ

0 голосов
/ 18 сентября 2018

Есть два способа прочитать ваш вопрос.

Теоретически возможно ли проанализировать строки CSV в JsonNodes с правильными типами значений ....?

Ответ - Да.Например:

  • Вы можете написать свой собственный анализатор CSV с нуля, который испускает JsonNode объектов.
  • Вы можете взять List<Map<String,String>> из вашего существующего анализатора CSV, применить некоторые эвристики 1 для преобразования в соответствующую структуру JsonNode (что бы это ни было).

Возможно ли проанализировать строки CSV в JsonNodes с правильными типами значений... используя существующий синтаксический анализатор?

Ответ почти наверняка нет. A (уважающий себя) анализатор CSV не будет генерировать структуры данных JSON, и (уважающий себя) анализатор JSON победилНе принимаю ввод в формате CSV.


Но, читая между строк, я подозреваю, что вы используете JsonNode только потому, что это удобный способ представления свободно вводимой информации.Но строки работают так же хорошо (как чистое представление), и вы можете реализовать преобразование в (более) типизированные представления, используя простую пользовательскую утилиту или класс-оболочку.


1 - в этом заключаетсяпроблема.CSV по существу не содержит типов, поэтому вам нужно использовать эвристику, чтобы сообщить вам, является ли значение логическим, целым, числом с плавающей запятой или строкой.Но преобразование неоднозначно, и строки в файле CSV могут быть противоречивыми.Таким образом, ваше преобразование в JsonNode объекты может оказаться ненадежным, если у вас нет «схемы» для файла CSV.

...