Чи може хтось порекомендувати аналізатор JSON Unix (виберіть свій аромат), який може бути використаний для введення значень у відповідь JSON у конвеєрі?
npm install -g ramda-cli
Чи може хтось порекомендувати аналізатор JSON Unix (виберіть свій аромат), який може бути використаний для введення значень у відповідь JSON у конвеєрі?
npm install -g ramda-cli
Відповіді:
Ви можете використовувати цей аналізатор командного рядка (який ви можете вставити в баш-псевдонім, якщо хочете), використовуючи модулі, вбудовані в ядро 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
}
Але слід зазначити, що це буде сортувати всі клавіші в алфавітному порядку, що є або може бути хорошою справою, де json був створений якоюсь мовою, яка використовувала не упорядковані HashMaps ...
json.tool
це лише коротка рука для симпатичного друку json. Якщо вам потрібно витягнути / маніпулювати даними json у скрипті оболонки, я б використовував, jq
що є дивним для того, що робить ...
json.tool
десять разів на день. Я думаю, що я неправильно прочитав значення "інтроспекції" у питанні, дякую за те, що ви вказали.
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.
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
pipe json до нього, і він проходить об'єкти json і виводить шлях до поточного об'єкта (як масив JSON), а потім до об'єкта без пробілу.
http://kmkeen.com/jshon/
Jshon завантажує json текст з stdin, виконує дії, потім виводить останню дію на stdout, а також робиться частиною звичайного конвеєра обробки тексту.
brew install jshon
,cat *.json | jshon
Ви можете спробувати jsawk, як пропонується у цій відповіді .
Дійсно, ви можете скористатися швидким сценарієм пітона, щоб це зробити.
Для 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. Можливо, це можна було б адаптувати до смаку.
У будь-якому випадку, щось домашнє для тих, хто не хоче джерела ще в одній зовнішній залежності. За винятком пітона, звичайно.
Вих. 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?