Как сделать незаметную печать на довольно JSON файле в оболочке >> последовательная строка JSON >> ES _bulk?
Итак, проведя пару дней, вспоминая, как кодировать все виды инструментов Unix, таких как sed, awk и grep, изучая пару относительно новых, таких как завиток (я знаю, правильно? Я даже вырываю gcc для первый раз, возможно, через 20 лет, но все это быстро возвращается) и добились значительного прогресса в создании небольшой JSON DB для использования с Elasticsearch на AWS EC2.
Но я просто попал в проблему с массовой индексацией, поскольку конечная точка ES _bulk требует, чтобы файлы были в основном последовательными строками JSON с \n терминаторами для каждой строки; и то, что я создал с использованием различных веб-API, и предварительная обработка файлов - это довольно JSON, то есть легко читаемый человеком.
Есть ли простой метод оболочки script, чтобы весь симпатичный JSON просто конкатенировался в строки, не загружая некоторые библиотеки Java или что-то еще? Я могу добавить токены к основному файлу во время предварительной обработки, чтобы пометить нужные \n перерывы, если это поможет разобрать, но если у кого-нибудь есть подсказка на наборе инструментов, я был бы благодарен, поскольку я - это маленький шаг от присоединения к концам проект. У меня есть ощущение, что там есть скрипты, и я знаю, что есть несколько библиотек, но я пока не нашел простых инструментов командной строки, чтобы сделать незаметную печать.
Большое спасибо за любые советы,
Приветствия
Сид
Ответы
Ответ 1
Вы можете попробовать отличный инструмент jq для разбора JSON в оболочке. Чтобы удалить текст с помощью jq, вы можете использовать любой из следующих способов:
cat pretty-printed.json | jq -c .
jq -c . pretty-printed.json
-c (или --compact-output) указывает на не очень печатную (по умолчанию). "." говорит ему вернуть содержимое JSON "как есть" без изменений, кроме переформатирования. Он сбрасывается обратно в stdout, поэтому вы можете перенаправить вывод или передать его на что-то еще.
P.S. Я искал решение той же проблемы и пришел к этому варианту.
Ответ 2
Вы можете попробовать найти/заменить с помощью regexp:
- Найти, что: "^\s {2,}" заменить на ""
- Найти, что "\n" заменить ""
Смотрите это: https://github.com/dzhibas/SublimePrettyJson/issues/17
Ответ 3
Ответ от D_S_toowhite не был прямым ответом, но он заставлял меня думать правильно, то есть проблема заключалась в том, чтобы удалить все пустое пространство. Я нашел очень простой способ удалить все пробелы с помощью инструмента командной строки tr:
tr -d [:space:] inputfile
Тег: space: теги удаляет все пробелы, табуляции, пробелы, вертикальные вкладки и т.д. Таким образом, хороший вход JSON выглядит следующим образом: -
{
"version" : "4.0",
"success" : true,
"result" :
{
"Focus" : 0.000590008,
"Arc" : 12
}
}
становится этой последовательной строкой JSON:
{"version":"4.0","success":true,"result":{"Focus":0.000590008,"Arc":12}}
Мне еще нужно решить \n терминатор, но я думаю, что это тривиально, по крайней мере, в моем специальном случае, просто добавьте после закрытия пары кронштейнов, используя sed.
Большое спасибо за предложение.
Приветствия
Сид
Ответ 4
jsonlint легко запускается и запускается в командной строке с помощью npm, и простой способ распечатать ' нет пуха 'JSON, чтобы дать ему отличительный характер ".
jsonlint -t ""
В качестве бонуса для пользователей командной строки я все время использую это для приема буферов-папок (на Mac) и преобразования их в нечто другое, например:
Содержимое своп-буфера для сжатого формата JSON:
pbpaste | jsonlint -t "" | pbcopy
Содержимое своп-буфера для довольно напечатанного формата JSON:
pbpaste | jsonlint | pbcopy
Вы также можете передать содержимое файла в уродливую (и JSON-литую) версию файла:
cat data-pretty.json | jsonlint -t "" > data-ugly.json