Adakah yang bisa merekomendasikan parser JSON Unix (pilih selera Anda) yang dapat digunakan untuk mengintrospeksi nilai-nilai dari respons JSON dalam sebuah pipa?
Adakah yang bisa merekomendasikan parser JSON Unix (pilih selera Anda) yang dapat digunakan untuk mengintrospeksi nilai-nilai dari respons JSON dalam sebuah pipa?
Jawaban:
Anda bisa menggunakan parser baris perintah ini (yang bisa Anda tambahkan ke alias bash jika Anda mau), menggunakan modul yang ada di inti Perl:
perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'
perl -e "use JSON; print to_json( decode_json(<>), { pretty => 1 } )"
Saya lebih suka python -m json.tool
yang tampaknya tersedia per default pada kebanyakan * nix sistem operasi per default.
$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
"bar": 2,
"foo": 1
}
Tetapi harus dicatat bahwa ini akan mengurutkan semua kunci secara alfabet, yang merupakan atau bisa menjadi hal yang baik di mana json dihasilkan oleh beberapa bahasa yang menggunakan HashMaps yang tidak diurut ...
json.tool
hanya tangan pendek untuk mencetak json cantik. Jika Anda perlu mengekstrak / memanipulasi data json dalam skrip shell, saya akan menggunakan jq
yang benar-benar luar biasa pada apa yang dilakukan ...
json.tool
sepuluh kali sehari. Saya pikir saya salah membaca arti dari "introspeksi" dalam pertanyaan, terima kasih atas pendapat Anda.
json.tool
hanya melakukan dua hal: validasi dan cantik-cetak json. Ini TIDAK mengintrospeksi nilai dalam json seperti jq
halnya.
Jika Anda mencari alat kompilasi C portabel:
http://stedolan.github.com/jq/
Dari situs web:
jq seperti sed untuk data JSON - Anda dapat menggunakannya untuk mengiris dan memfilter dan memetakan dan mengubah data terstruktur dengan kemudahan yang sama seperti sed , awk , grep , dan teman-teman memungkinkan Anda bermain dengan teks.
jq dapat memecah format data yang Anda miliki menjadi yang Anda inginkan dengan sedikit usaha, dan program untuk melakukannya seringkali lebih pendek dan lebih sederhana daripada yang Anda harapkan.
Tutorial : http://stedolan.github.com/jq/tutorial/
Manual : http://stedolan.github.com/jq/manual/
Unduh : http://stedolan.github.com/jq/download/
apt install jq
.
jq
.
Saya telah membuat modul yang dirancang khusus untuk manipulasi JSON baris perintah:
https://github.com/ddopson/underscore-cli
Ini memungkinkan Anda melakukan hal-hal hebat dengan sangat mudah:
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
Dan ia memiliki salah satu dari format JSON "smart-whitespace" terbaik:
Jika Anda memiliki permintaan fitur, komentari posting ini atau tambahkan masalah di github. Saya akan dengan senang hati memprioritaskan fitur yang dibutuhkan oleh anggota komunitas.
wget
setiap URL.
underscore
parsing nested json yang memiliki objek dan array yang bersarang?
Ada juga toolkit pemrosesan baris perintah JSON jika Anda memiliki node.js dan npm di tumpukan Anda.
Dan perintah "json" lain untuk memijat JSON pada baris perintah Unix Anda.
Dan inilah alternatif lain:
Terkait: Alat baris perintah untuk mem-parsing input JSON untuk Unix?
npm install json
.
json
tampaknya diambil alih oleh paket yang sama sekali berbeda sekarang.
Adakah yang menyebut Jshon atau JSON.sh?
https://github.com/keenerd/jshon
pipe json untuk itu, dan itu melintasi objek json dan mencetak jalan ke objek saat ini (sebagai array JSON) dan kemudian objek, tanpa spasi.
http://kmkeen.com/jshon/
Jshon memuat teks json dari stdin, melakukan tindakan, kemudian menampilkan tindakan terakhir di stdout dan juga dibuat menjadi bagian dari pipa pemrosesan teks yang biasa.
brew install jshon
,cat *.json | jshon
Anda dapat mencoba jsawk seperti yang disarankan dalam jawaban ini .
Benar-benar Anda bisa menyiapkan skrip python cepat untuk melakukan ini.
Untuk Bash / Python , berikut ini adalah pembungkus dasar sekitar 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
}
Ini benar-benar hanya menangani gaya data yang bersarang-kamus, tetapi berfungsi untuk apa yang saya butuhkan, dan berguna untuk berjalan melalui json. Mungkin bisa disesuaikan dengan selera.
Pokoknya, sesuatu yang dibuat sendiri bagi mereka yang tidak ingin sumber dalam ketergantungan eksternal lain. Kecuali python, tentu saja.
Ex. json_parser {field1} {field2}
akan berjalan print myjson['{field1}']['{field2}']
, menghasilkan kunci atau nilai yang terkait dengan {field2}
, dipisahkan oleh spasi.
Saya baru saja membuat jkid yang merupakan penjelajah json command-line kecil yang saya buat untuk dengan mudah menjelajahi objek json besar. Objek dapat dieksplorasi "transversal" dan opsi "pratinjau" ada untuk menghindari konsol overflow.
$ echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json
$ jkid . eyes test3.json
object[.]["eyes"]
{
"bob": "brown",
"john": "green"
}
jkid
di mac?