Может ли кто-нибудь рекомендовать JSON-анализатор Unix (выберите ваш вкус), который можно использовать для анализа значений из ответа JSON в конвейере?
Unix командной строки JSON парсер?
Ответ 1
Сначала установите модуль JSON из CPAN:
cpan JSON
Затем вы можете использовать этот синтаксический анализатор командной строки (который вы можете поместить в псевдоним bash, если хотите):
perl -MData::Dumper -MJSON=from_json -ne'print Dumper(from_json($_))'
Ответ 2
Я предпочитаю python -m json.tool
, который, по-видимому, доступен по умолчанию для большинства операционных систем * nix по умолчанию.
$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
"bar": 2,
"foo": 1
}
Но следует отметить, что это отсортирует все ключи по алфавиту, что хорошо или хорошо, когда json был сгенерирован каким-то языком, который использовал неупорядоченные HashMaps...
Ответ 3
Если вы ищете переносимый скомпилированный инструмент C:
http://stedolan.github.com/jq/
С веб-сайта:
jq подобен sed для данных JSON - вы можете использовать его для среза и фильтрации, а также для преобразования и преобразования структурированных данных с той же легкостью, что sed, awk, grep и friends позволяют вам играть с текстом.
jq может исказить формат данных, который у вас есть, в тот, который вы хотите, с очень небольшим усилием, и программа для этого часто короче и проще, чем вы ожидаете.
Учебное пособие: http://stedolan.github.com/jq/tutorial/
Руководство: http://stedolan.github.com/jq/manual/
Загрузить: http://stedolan.github.com/jq/download/
Ответ 4
Я создал модуль, специально разработанный для манипуляции JSON с командной строкой:
https://github.com/ddopson/underscore-cli
- FLEXIBLE. Инструмент "swiss-army-knife" для обработки данных JSON - может использоваться как простой симпатичный принтер или как полноценная Javascript-команда.
- МОЩНЫЙ - предоставляет полную мощность и функциональность underscore.js(плюс underscore.string)
- ПРОСТОЙ - упрощает запись однострочных JS, аналогичных использованию "perl -pe"
- CHAINED. Несколько команд-команд можно связать вместе для создания конвейера обработки данных.
- MULTI-FORMAT. Богатая поддержка форматов ввода/вывода - довольно печатная, строгая JSON и т.д. [скоро]
- DOCUMENTED - отличная документация по командной строке с несколькими примерами для каждой команды
Это позволяет вам делать мощные вещи очень легко:
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 "smart-whitespace":
Если у вас есть какие-либо функции, прокомментируйте это сообщение или добавьте проблему в github. Я был бы рад определить приоритеты функций, которые необходимы членам сообщества.
Ответ 5
Существует также набор инструментов для обработки командной строки JSON, если в вашем стеке есть node.js и npm.
И еще одна команда "json" для массирования JSON в командной строке Unix.
А вот и другие альтернативы:
- JQ: http://stedolan.github.io/jq/
- FX: https://github.com/antonmedv/fx
- json: выберите: http://jsonselect.org/
- json-команда: https://github.com/zpoley/json-command
- JSONPath: http://goessner.net/articles/JsonPath/, http://code.google.com/p/jsonpath/wiki/Javascript
- jsawk: https://github.com/micha/jsawk
- jshon: http://kmkeen.com/jshon/
- json2: https://github.com/vi/json2
Связанный: инструмент командной строки для анализа ввода JSON для Unix?
Ответ 6
Оформить заказ 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"]``
Ответ 7
Кто-нибудь упомянул Jshon или JSON.sh?
https://github.com/keenerd/jshon
pipe json, и он перемещает объекты json и печатает путь к текущему объекту (как массив JSON), а затем объект без пробелов.
http://kmkeen.com/jshon/
Jshon загружает json-текст из stdin, выполняет действия, затем отображает последнее действие на stdout, а также был сделан частью обычного конвейера обработки текста.
Ответ 8
Вы можете попробовать jsawk, как это предложено в этом ответе.
Действительно, вы могли бы разбить быстрый python script, чтобы сделать это, хотя.
Ответ 9
Для 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 [email protected]
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. Вероятно, он может быть адаптирован к вкусу.
Во всяком случае, что-то самодовольное для тех, кто не хочет ссылаться на еще одну внешнюю зависимость. За исключением python, конечно.
Ex. json_parser {field1} {field2}
будет запускать print myjson['{field1}']['{field2}']
, получая либо ключи, либо значения, связанные с {field2}
, разделенные пробелами.
Ответ 10
Я только что сделал 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"
}