Bir boru hattındaki JSON yanıtından gelen değerleri incelemek için kullanılabilecek bir Unix (kendi tarzınızı seçin) JSON ayrıştırıcısı önerebilir mi?
Bir boru hattındaki JSON yanıtından gelen değerleri incelemek için kullanılabilecek bir Unix (kendi tarzınızı seçin) JSON ayrıştırıcısı önerebilir mi?
Yanıtlar:
Perl çekirdeğinde yerleşik modülleri kullanarak bu komut satırı ayrıştırıcısını (isterseniz bir bash takma adına koyabilirsiniz) kullanabilirsiniz:
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
Varsayılan olarak çoğu * nix işletim sisteminde varsayılan olarak mevcut görünen tercih ediyorum .
$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
"bar": 2,
"foo": 1
}
Not: Python sürümünüze bağlı olarak , tüm anahtarlar alfabetik olarak sıralanabilir ve bu iyi bir şey olabilir veya olmayabilir. Python 2 ile anahtarları sıralama varsayılandı, python 3.5+ sürümünde ise bunlar artık otomatik olarak sıralanmıyor, ancak açıkça anahtara göre sıralama seçeneğiniz var:
$ echo '{"foo":1, "bar":2}' | python3 -m json.tool --sort-keys
{
"bar": 2,
"foo": 1
}
json.tool
json yazdırmak için sadece kısa bir el. Bir kabuk betiğinde json verilerini çıkarmanız / işlemeniz gerekiyorsa jq
, ne
json.tool
sadece iki şey yapar: json doğrulamak ve oldukça yazdırmak. Json'daki değerlerin jq
yaptığı gibi iç gözlem YAPMAZ .
Taşınabilir bir C derlenmiş aracı arıyorsanız:
http://stedolan.github.com/jq/
Web sitesinden:
jq, JSON verileri için sed gibidir - yapılandırılmış verileri, sed , awk , grep ile aynı kolaylıkla dilimlemek, filtrelemek, eşlemek ve dönüştürmek için kullanabilirsiniz. ve arkadaşların metinle oynamanıza izin .
jq, sahip olduğunuz veri formatını çok az çabayla istediğiniz formata dönüştürebilir ve bunu yapacak program genellikle beklediğinizden daha kısa ve basittir.
Öğretici : http://stedolan.github.com/jq/tutorial/
Manual : http://stedolan.github.com/jq/manual/
İndir : http://stedolan.github.com/jq/download/
apt install jq
.
jq
.
Komut satırı JSON manipülasyonu için özel olarak tasarlanmış bir modül oluşturdum:
https://github.com/ddopson/underscore-cli
Güçlü şeyleri gerçekten kolayca yapmanızı sağlar:
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
Ayrıca mevcut en iyi "akıllı boşluk" JSON biçimlendiricilerinden birine sahiptir:
Herhangi bir özellik talebiniz varsa, bu gönderiye yorum yapın veya github'a bir sorun ekleyin. Topluluk üyelerinin ihtiyaç duyduğu özelliklere öncelik vermekten memnuniyet duyarım.
wget
her URL.
underscore
İç içe yerleştirilmiş nesneler ve diziler içeren iç içe geçmiş json'u ayrıştırmak için kullanabilir miyim ?
Checkout TickTick .
Gerçek bir Bash JSON ayrıştırıcısıdır.
#!/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"]``
Yığınınızda node.js ve npm varsa JSON komut satırı işleme araç seti de vardır .
Ve Unix komut satırınızda JSON'a masaj yapmak için başka bir "json" komutu .
Ve işte diğer alternatifler:
İlgili: Unix için JSON girdisini ayrıştırmak için komut satırı aracı?
npm install json
.
json
paketi artık tamamen farklı bir paket tarafından ele geçirilmiş görünüyor.
Jshon veya JSON.sh'den bahseden var mı?
https://github.com/keenerd/jshon
boru json'u buna yönlendirir ve json nesnelerini geçerek geçerli nesnenin yolunu (JSON dizisi olarak) ve sonra nesneyi boşluksuz olarak yazdırır.
http://kmkeen.com/jshon/
Jshon, stdin'den json metni yükler, eylemler gerçekleştirir, ardından stdout'taki son eylemi görüntüler ve ayrıca olağan metin işleme hattının bir parçası olarak yapılmıştır.
brew install jshon
,cat *.json | jshon
İçin Bash / Python , burada piton etrafa bir temel sarıcı 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
}
Gerçekten yalnızca iç içe geçmiş sözlük stilini işler, ancak ihtiyacım olan şey için çalışıyor ve json'da yürümek için kullanışlıdır. Muhtemelen tadına göre uyarlanabilir.
Her neyse, başka bir dış bağımlılıktan kaynaklanmak istemeyenler için evde yetiştirilen bir şey. Tabii ki python hariç.
Ör. json_parser {field1} {field2}
çalışır print myjson['{field1}']['{field2}']
ve {field2}
boşlukla ayrılmış anahtarları veya ilişkili değerleri verir .
Büyük json nesnelerini kolayca keşfetmek için yaptığım küçük bir komut satırı json gezgini olan jkid'i yeni yaptım . Nesneler "enine" olarak keşfedilebilir ve konsol taşmasını önlemek için bir "önizleme" seçeneği vardır.
$ echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json
$ jkid . eyes test3.json
object[.]["eyes"]
{
"bob": "brown",
"john": "green"
}
jkid
?