LINUX.ORG.RU

Какой формат анализировать в консоли: CSV, XML или JSON?

 , , ,


1

1

Здравствуйте. Подскажите, какой формат удобней анализировать в консоли: CSV, XML или JSON?

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

О XML я читал в книге Дмитрия Котерова «PHP5 на практике» лет так 13 назад, до практики дело не дошло. А о JSON имею посредственное представление т.к. правил пару конфигов.

Стоит ли вообще смотреть в сторону XML и JSON если мне нужно только анализировать в консоли поля БД на несоответствие регулярному выражению т.к. эти форматы древовидные в отличии от CSV.


о какой БД идёт речь? если sqlite, то там есть опция -tabs, такие поля ты можешь прочитать простым sqlite3 -tabs kvm.db "SELECT * FROM kvm_hosts;" | while read a b c d; do echo $b ; done где поля будут разделены табами — 9 символом по аски-таблице, а через read var1 var2 var3 ты можешь писать значение каждого поля в отдельную переменную. это неплохо, пока у тебя не будет 9 аски символ как часть содержимого.

Spoofing ★★★★★
()
Ответ на: комментарий от Spoofing

Я не знаю какая БД в 1С. Выгрузку мне дают в Excel, а я конвертирую в CSV и анализирую.

Но выяснилось, что выгрузку могут дать в XML и JSON.

Давали бы дамп БД, я бы конечно лучше парсил с помощью SQL.

Gnom7
() автор топика
Ответ на: комментарий от Gnom7

при любом раскладе нативно парсить на баше можешь только данные разделённые каким-либо спецсимволом, вроде таба.

для всего остального лучше использовать сторонние инструменты, например php для json — тут тебе низкий порог вхождения.

но если сильно хочешь чистый bash, то есть такой вариант для парсинга xml

read_xml () {
  local IFS=\>
  read -d \< ENTITY CONTENT
}

while read_xml; do
  echo $ENTITY : $CONTENT
done

и через данный скрипт как через stdin пропускай любое XML.

echo <xml>data</xml> | read_xml.sh

но всё это жутко и некрасиво. не используй bash для этого. возьми хотя бы php. json — хороший вариант.

Spoofing ★★★★★
()

Самый удобный в любом случае это XML, т.к. там должна быть схема, по которой парсер можно сгенерировать. Всё остальное чревато проблемами при разборе.

cocucka ★★★★☆
()

Отталкивайся от задачи. Определись, нужна ли тебе древовидность, исходя из структуры данных?
Если нужна — XML/JSON лучше. Если нет — то и CSV за глаза хватит. Если несколько таблиц со ссылками — древовидность будет плюсом, но можно каждую таблицу выгрузить в свой CSV и анализировать их совеместно.
У тебя в тегах bash, ты собрался непосредственно на баше анализ проводить? Мне это кажется плохой идеей. Можно взять любой язык, для которого есть готовые либы парсинга тех же XML/JSON. Перл, Питон и даже C++.

Я не знаю какая БД в 1С. Выгрузку мне дают в Excel, а я конвертирую в CSV и анализирую.
Но выяснилось, что выгрузку могут дать в XML и JSON.

Упс. Тогда Excel->CSV — ненужное телодвижение, которое при извратном Excel-файле может ещё что-то потерять при преобразовании. Я бы взял XML. Есть куча парсеров, начиная с libxml2, освоишь — лишним не будет.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

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

Ну такое себе, лучше не использовать такой вариант. У вас форматы с определенной структурой, и вы намеренно это не используете.

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

Вообще если вам предстоит какая-то работа со строками сложнее чем «взять у одной программы - передать в другую программу» лучше bash не использовать (имхо).

micronekodesu ★★★
()

Только JSON. JSON наше всё. Люблю JSON. Парсится даже sh.

// Сам бы в JSON залез.

IPR ★★★★★
()

JSON

TL;DR: Если без дополнительно информации, то рекомендую JSON.

CSV/TSV

Если работаешь с табличными данными, то CSV (а лучше TSV) неплох, но при одном условии: если в значениях нет переводов строк. Если они есть, работа с таким файлом требует специальной магии.

Если данные не табличные, или не совсем табличные, то JSON, либо XML, но в идеале YAML.

XML

XML переусложнён. По сравнению с JSON, его труднее читать человеку, и труднее работать с ним в коде. Последнее в основном из-за того, что без XSD схемы невозможно различить просто простой аттрибут и массив с одним элементом, строку и число; соответственно, нужно спец. функции по проходу по дереву, плюс можно забыть про шаблонизаторы вроде TWIG/Jinja.

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

JSON

JSON подходит для большиства случаев. Хорошо читается человеком, прекрасно парсится. Много тулов. Если нужна схема - JSON Schema (а еще лучше - YANG). Нужен язык запросов - JSON Query. Diff/Edit - JSON Patch стандартизирован.

Минусы JSON. Эта идиотская запятая, которая нужна всегда кроме последнего аттрибута! Нет комментариев. Аналогов XSLT нет. Мета-информация делается через грязный хак, и выглядит ужасно. Кстати, проблему с комментариями и запятой решили в JSON5, но мало кто про него знает, да и Python либа по работе с ним работает раз в 5 медленней.

YAML

Отличный язык. Самый читабельный из всех. Есть либы для всех языков. Есть хитрые фичи вроде ссылок. Не уверен, есть ли для него схемы, но если очень нужно, уверен, можно JSON Schemа прикрутить. Единственный изъян - нет нативной поддержки метаданных. В остальном - отличный язык.

P. S.

опыт работы парсинга, а точнее анализа с помощью регулярных выражений, формата CSV

Не делай так. Если нужно работать с файлом, ищи спец. библиотеки. Не нужно самому писать парсер.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.