Как я могу уменьшить JSON в сценарии оболочки? - PullRequest
1 голос
/ 09 апреля 2020

Я искал способ увеличить JSON, находясь в моей консоли bash. Эта справка, использующая его впоследствии в другой команде (например, для передачи json inline в httpie)

Предоставление:

{
    "foo": "lorem",
    "bar": "ipsum"
}

Я хочу получить:

{"foo":"lorem","bar":"ipsum"}

ПРИМЕЧАНИЕ: этот вопрос намеренно в значительной степени вдохновлен это симпатичная копия . Однако поиск в Google для bash minify json не дал мне должного результата, поэтому возникли вопросы для minify / uglify.

1 Ответ

1 голос
/ 09 апреля 2020

Использование jj -u < my.json представляется наиболее эффективным при использовании инструмента jj .

Однако однострочник python является довольно эффективным способом, если у вас уже есть python установлен и не нужен новый сторонний инструмент для такой задачи:

python -c 'import json, sys;json.dump(json.load(sys.stdin), sys.stdout)'

Perf benchmark

Вот быстрый скрипт для сравнения этих решений (тот, который говорит jj - безусловно, самый мощный):

bench () (
    set -e
    local file=$(mktemp)
    trap "rm -f $file" ERR EXIT
    cat <<JSON > $file
{
    "foo": "lorem",
    "bar": "ipsum"
}
JSON
    time (
        for i in {1..100}; do
            "$@" < $file >& /dev/null
        done
    )
)

И результат на моей ма c (8 ГБ 2133 МГц LPDDR3, 2,3 ГГц Intel Core i5):

bench python -c 'import json, sys;json.dump(json.load(sys.stdin), sys.stdout)'
# 2.47s user 0.85s system 91% cpu 3.628 total

bench jq --compact-output
# 2.49s user 0.20s system 95% cpu 2.810 total

bench jj -p
# 0.17s user 0.22s system 77% cpu 0.498 total
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...