Как сделать UIView Intrective Animation в Swift 3?

Чтобы быстро извлечь значения для определенного ключа, мне лично нравится использовать «grep -o», который возвращает только соответствие регулярному выражению. Например, чтобы получить поле «текст» из твитов, например:

grep -Po '"text":.*?[^\\]",' tweets.json

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

И для дальнейшей очистки (хотя и сохранения исходного экранирования строки) вы можете использовать что-то вроде: | perl -pe 's/"text"://; s/^"//; s/",$//'. (Я сделал это для этого анализа .)

Для всех ненавистников, которые настаивают, что вы должны использовать настоящий парсер JSON - да, это важно для правильности, но

  1. Чтобы сделать действительно быстрый анализ, например, подсчитать значения, чтобы проверять ошибки очистки данных или получить общее представление о данных, быстрее удалять что-то из командной строки. Открытие редактора для написания скрипта отвлекает.
  2. grep -o на порядок быстрее, чем стандартная библиотека json Python, по крайней мере, когда это делается для твитов (которые составляют ~ 2 КБ каждый). Я не уверен, что это происходит только потому, что json медленный (я должен иногда сравнивать с yajl); но в принципе, регулярное выражение должно быть быстрее, поскольку оно является конечным состоянием и гораздо более оптимизированным, а не парсером, который должен поддерживать рекурсию, и в этом случае тратит много деревьев на сборку зданий для структур, которые вам не нужны. (Если кто-то написал конечный преобразователь состояния, который сделал правильный (ограниченный глубиной) JSON-анализ, это было бы фантастично! Тем временем у нас есть «grep -o».)

кода, я всегда использую настоящую парсинговую библиотеку. Я не пробовал jsawk , но если он работает хорошо, это касается точки № 1.

Последнее, более wackier, решение: я написал скрипт, который использует Python json и извлекает нужные вам ключи, в столбцы, разделенные вкладками; затем я прохожу через обертку вокруг awk, которая позволяет именованный доступ к столбцам. Здесь: скрипты json2tsv и tvvawk . Таким образом, для этого примера это будет:

json2tsv id text < tweets.json | tsvawk '{print "tweet " $id " is: " $text}'

Этот подход не относится к №2, более неэффективен, чем один скрипт Python, и он немного хрупкий: он принудительно нормализует новые строки и вкладки в строковые значения, чтобы играть хорошо с полем awk / разделенным на запись видом мира. Но это позволяет вам оставаться в командной строке с большей точностью, чем grep -o.

0
задан princ___y 25 March 2019 в 04:45
поделиться