Может ли кто-нибудь порекомендовать парсер JSON для Unix (выберите свой вариант), который можно было бы использовать для анализа значений из ответа JSON в конвейере?
Может ли кто-нибудь порекомендовать парсер JSON для Unix (выберите свой вариант), который можно было бы использовать для анализа значений из ответа JSON в конвейере?
Ответы:
Вы можете использовать этот синтаксический анализатор командной строки (который вы можете поместить в псевдоним bash, если хотите), используя модули, встроенные в ядро Perl:
perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'
perl -e "use JSON; print to_json( decode_json(<>), { pretty => 1 } )"
Я предпочитаю то, python -m json.tool
что по умолчанию доступно в большинстве операционных систем * nix.
$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
"bar": 2,
"foo": 1
}
Примечание. В зависимости от вашей версии Python все ключи могут быть отсортированы в алфавитном порядке, что может быть хорошо, а может и не быть. В python 2 по умолчанию ключи сортировались, тогда как в python 3.5+ они больше не сортируются автоматически, но у вас есть возможность явно сортировать по ключу:
$ echo '{"foo":1, "bar":2}' | python3 -m json.tool --sort-keys
{
"bar": 2,
"foo": 1
}
json.tool
это просто короткая рука, чтобы красиво печатать json. Если вам нужно извлекать / манипулировать данными json в сценарии оболочки, я бы использовал jq
это просто потрясающе в том, что делает ...
json.tool
делает только две вещи: проверяет и печатает json. Он НЕ анализирует значения в json, как это jq
делает.
Если вы ищете портативный инструмент, скомпилированный на C:
http://stedolan.github.com/jq/
С веб-сайта:
jq похож на sed для данных JSON - вы можете использовать его для нарезки, фильтрации, сопоставления и преобразования структурированных данных с той же легкостью, что и sed , awk , grep. и их друзья позволяют вам играть с текстом.
jq может преобразовать формат данных, который у вас есть, в тот, который вам нужен, с очень небольшими усилиями, а программа для этого часто короче и проще, чем вы ожидали.
Учебник : http://stedolan.github.com/jq/tutorial/
Руководство : http://stedolan.github.com/jq/manual/
Загрузить : http://stedolan.github.com/jq/download/
apt install jq
.
jq
.
Я создал модуль, специально разработанный для работы с JSON в командной строке:
https://github.com/ddopson/underscore-cli
Это позволяет вам очень легко делать мощные вещи:
cat earthporn.json | underscore select '.data .title'
# [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]',
# 'New town, Edinburgh, Scotland [4320 x 3240]',
# 'Sunrise in Bryce Canyon, UT [1120x700] [OC]',
# ...
# 'Kariega Game Reserve, South Africa [3584x2688]',
# 'Valle de la Luna, Chile [OS] [1024x683]',
# 'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ]
cat earthporn.json | underscore select '.data .title' | underscore count
# 25
underscore map --data '[1, 2, 3, 4]' 'value+1'
# prints: [ 2, 3, 4, 5 ]
underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)'
# [ 4, 8 ]
echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)'
# key = foo
# key = bar
underscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name
# [ 'moe', 'larry', 'curly' ]
underscore keys --data '{name : "larry", age : 50}'
# [ 'name', 'age' ]
underscore reduce --data '[1, 2, 3, 4]' 'total+value'
# 10
И у него есть один из лучших доступных форматеров JSON для "умных пробелов":
Если у вас есть какие-либо пожелания по функциям, прокомментируйте этот пост или добавьте проблему в github. Я был бы рад расставить приоритеты в функциях, которые нужны членам сообщества.
wget
URL-адресов каждый URL.
underscore
для разбора вложенный json с вложенными объектами и массивами?
Оформить заказ TickTick .
Это настоящий парсер Bash JSON.
#!/bin/bash
. /path/to/ticktick.sh
# File
DATA=`cat data.json`
# cURL
#DATA=`curl http://foobar3000.com/echo/request.json`
tickParse "$DATA"
echo ``pathname``
echo ``headers["user-agent"]``
Также имеется набор инструментов для обработки командной строки JSON. если в вашем стеке есть node.js и npm.
И другой команда "json" для массирования JSON в командной строке Unix.
А вот и другие альтернативы:
Связано: Инструмент командной строки для анализа ввода JSON для Unix?
npm install json
.
json
похоже, теперь заменен совершенно другим пакетом.
Кто-нибудь упомянул Jshon или JSON.sh?
https://github.com/keenerd/jshon
конвейер json к нему, и он просматривает объекты json и распечатывает путь к текущему объекту (в виде массива JSON), а затем к объекту без пробелов.
http://kmkeen.com/jshon/
Jshon загружает текст json из stdin, выполняет действия, затем отображает последнее действие в stdout, а также был включен в обычный конвейер обработки текста.
brew install jshon
,cat *.json | jshon
Вы можете попробовать jsawk, как предлагается в этом ответе .
На самом деле вы могли бы создать для этого быстрый скрипт на Python.
Для Bash / Python вот базовая оболочка для python simplejson
:
json_parser() {
local jsonfile="my_json_file.json"
local tc="import simplejson,sys; myjsonstr=sys.stdin.read(); "`
`"myjson=simplejson.loads(myjsonstr);"
# Build python print command based on $@
local printcmd="print myjson"
for (( argn=1; argn<=$#; argn++ )); do
printcmd="$printcmd['${!argn}']"
done
local result=$(python -c "$tc $printcmd.keys()" <$jsonfile 2>/dev/null \
|| python -c "$tc $printcmd" <$jsonfile 2>/dev/null)
# For returning space-separated values
echo $result|sed -e "s/[]|[|,|']//g"
#echo $result
}
Он действительно обрабатывает данные только в стиле вложенного словаря, но он работает для того, что мне было нужно, и полезен для просмотра json. Наверное, можно было бы адаптировать по вкусу.
В любом случае, что-то самодельное для тех, кто не хочет использовать еще одну внешнюю зависимость. За исключением, конечно, питона.
Ex. json_parser {field1} {field2}
будет работать print myjson['{field1}']['{field2}']
, выдавая либо ключи, либо значения, связанные с {field2}
, разделенные пробелами.
Я только что создал jkid , небольшой обозреватель json в командной строке, который я сделал для легкого изучения больших объектов json. Объекты можно исследовать «трансверсально», и есть опция «предварительного просмотра», чтобы избежать переполнения консоли.
$ echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json
$ jkid . eyes test3.json
object[.]["eyes"]
{
"bob": "brown",
"john": "green"
}
jkid
на Mac?