Saya mencoba mengurai JSON yang dikembalikan dari permintaan ikal, seperti:
curl 'http://twitter.com/users/username.json' |
sed -e 's/[{}]/''/g' |
awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}'
Di atas membagi JSON menjadi bidang, misalnya:
% ...
"geo_enabled":false
"friends_count":245
"profile_text_color":"000000"
"status":"in_reply_to_screen_name":null
"source":"web"
"truncated":false
"text":"My status"
"favorited":false
% ...
Bagaimana cara mencetak bidang tertentu (dilambangkan oleh -v k=text
)?
grep -Po '"'"version"'"\s*:\s*"\K([^"]*)' package.json
. Ini menyelesaikan tugas dengan mudah & hanya dengan grep dan bekerja dengan sempurna untuk JSON sederhana. Untuk JSON kompleks Anda harus menggunakan parser yang tepat.Jawaban:
Ada sejumlah alat yang dirancang khusus untuk tujuan memanipulasi JSON dari baris perintah, dan akan jauh lebih mudah dan lebih dapat diandalkan daripada melakukannya dengan Awk, seperti
jq
:Anda juga dapat melakukan ini dengan alat-alat yang mungkin sudah diinstal pada sistem Anda, seperti Python menggunakan
json
modul , dan karenanya menghindari ketergantungan tambahan, sementara masih memiliki manfaat parser JSON yang tepat. Asumsi berikut Anda ingin menggunakan UTF-8, yang mana JSON asli harus dikodekan dan apa yang digunakan sebagian besar terminal modern juga:Python 3:
Python 2:
Catatan sejarah
Jawaban ini awalnya merekomendasikan jsawk , yang seharusnya masih berfungsi, tetapi sedikit lebih rumit untuk digunakan daripada
jq
, dan tergantung pada penerjemah mandiri JavaScript yang diinstal yang lebih jarang daripada penerjemah Python, jadi jawaban di atas mungkin lebih disukai:Jawaban ini awalnya juga menggunakan API Twitter dari pertanyaan, tetapi API itu tidak lagi berfungsi, sehingga sulit untuk menyalin contoh untuk diuji, dan API Twitter baru memerlukan kunci API, jadi saya telah beralih menggunakan API GitHub yang dapat digunakan dengan mudah tanpa kunci API. Jawaban pertama untuk pertanyaan awal adalah:
sumber
print
pernyataan itu akan selalu disandikan ke ASCII karena Anda menggunakan Python dalam sebuah pipa. MasukkanPYTHONIOENCODING=<desired codec>
ke dalam perintah untuk mengatur pengkodean keluaran yang berbeda, cocok untuk terminal Anda. Dalam Python 3, standarnya adalah UTF-8 dalam kasus ini (menggunakanprint()
fungsi ).curl -s
setara dengancurl --silent
, sedangkanjq -r
berartijq --raw-output
yaitu tanpa kutipan string.Untuk mengekstrak nilai untuk kunci tertentu dengan cepat, saya pribadi suka menggunakan "grep -o", yang hanya mengembalikan kecocokan regex. Misalnya, untuk mendapatkan bidang "teks" dari tweet, sesuatu seperti:
Regex ini lebih kuat dari yang Anda kira; misalnya, ia berurusan dengan string yang memiliki tanda koma dan lolos dari kutipan di dalamnya. Saya pikir dengan sedikit lebih banyak pekerjaan Anda bisa membuat satu yang sebenarnya dijamin untuk mengekstraksi nilai, jika itu atomik. (Jika bersarang, maka regex tidak bisa melakukannya tentu saja.)
Dan untuk bersih lebih lanjut (meskipun menjaga melarikan diri asli string) Anda dapat menggunakan sesuatu seperti:
| perl -pe 's/"text"://; s/^"//; s/",$//'
. (Saya melakukan ini untuk analisis ini .)Untuk semua pembenci yang bersikeras Anda harus menggunakan parser JSON nyata - ya, itu penting untuk kebenaran, tetapi
grep -o
adalah urutan besarnya lebih cepat darijson
pustaka standar Python , setidaknya saat melakukan ini untuk tweet (masing-masing ~ 2 KB). Saya tidak yakin apakah ini hanya karenajson
lambat (saya harus membandingkan dengan yajl kapan-kapan); tetapi pada prinsipnya, sebuah regex harus lebih cepat karena keadaannya terbatas dan jauh lebih optimal, daripada parser yang harus mendukung rekursi, dan dalam hal ini, menghabiskan banyak pohon pembangun CPU untuk struktur yang tidak Anda pedulikan. (Jika seseorang menulis transduser keadaan terbatas yang melakukan parsing JSON yang tepat (kedalaman terbatas), itu akan fantastis! Sementara itu kita memiliki "grep -o".)Untuk menulis kode yang bisa dipelihara, saya selalu menggunakan parsing perpustakaan nyata. Saya belum mencoba jsawk , tetapi jika itu bekerja dengan baik, itu akan membahas poin # 1.
Solusi terakhir, lebih aneh,: Saya menulis sebuah skrip yang menggunakan Python
json
dan mengekstrak kunci yang Anda inginkan, ke dalam kolom-kolom yang dipisahkan-tab; kemudian saya pipa melalui pembungkus di sekitarawk
yang memungkinkan akses bernama ke kolom. Di sini: skrip json2tsv dan tsvawk . Jadi untuk contoh ini akan menjadi:Pendekatan ini tidak membahas # 2, lebih tidak efisien daripada skrip Python tunggal, dan ini sedikit rapuh: itu memaksa normalisasi baris baru dan tab dalam nilai string, untuk bermain baik dengan bidang awk / catatan-dibatasi tampilan dunia. Tapi itu tidak membiarkan Anda tetap di baris perintah, dengan lebih banyak kebenaran daripada
grep -o
.sumber
grep -Po '"text":(\d*?,|.*?[^\\]",)'
jq .name
bekerja pada baris perintah dan tidak memerlukan "membuka editor untuk menulis skrip". 2. Tidak masalah seberapa cepat regex Anda dapat menghasilkan hasil yang salah| grep -Po '"text":.*?[^\\]",'|awk -F':' '{print $2}'
-P
opsi hilang. Saya diuji pada OSX 10.11.5 dangrep --version
sebelumnyagrep (BSD grep) 2.5.1-FreeBSD
. Saya membuatnya bekerja dengan opsi "extended regex" di OSX. Perintah dari atas adalahgrep -Eo '"text":.*?[^\\]",' tweets.json
.Atas dasar bahwa beberapa rekomendasi di sini (esp dalam komentar) menyarankan penggunaan Python, saya kecewa tidak menemukan contoh.
Jadi, inilah satu liner untuk mendapatkan nilai tunggal dari beberapa data JSON. Itu mengasumsikan bahwa Anda memipipkan data di (dari suatu tempat) dan karenanya harus berguna dalam konteks skrip.
sumber
pythonpy
( github.com/russell91/pythonpy hampir selalu merupakan alternatif yang lebih baikpython -c
, walaupun itu harus diinstal dengan pip. Hanya pipa json kepy --ji -x 'x[0]["hostname"]'
. Jika Anda tidak ingin menggunakan dukungan json_input bawaan, Anda masih bisa mendapatkan mereka mengimpor secara otomatis sebagaipy 'json.loads(sys.stdin)[0]["hostname"]'
jsonq() { python -c "import sys,json; obj=json.load(sys.stdin); print($1)"; }
sehingga saya dapat menulis:curl ...... | jsonq 'json.dumps([key["token"] for key in obj], indent=2)'
& lebih banyak hal menyeramkan yang serupa ... Btw,obj[0]
sepertinya tidak perlu, sepertinya hanyaobj
berfungsi OK dalam kasus default (?).jsonq() { python -c "import sys,json; obj=json.load(sys.stdin); sys.stdout.write(json.dumps($1))"; }
obj[0]
menyebabkan kesalahan saat parsing{ "port":5555 }
. Bekerja dengan baik setelah melepas[0]
.Mengikuti jejak MartinR dan Boecko:
Itu akan memberi Anda output ramah sangat grep. Sangat mudah:
sumber
| grep field
. Terima kasih!jq
biasanya tidak diinstal saat python. Juga, sekali Anda menggunakan Python, Anda bisa melanjutkan dan menguraikannya denganimport json...
Anda bisa mengunduh
jq
biner untuk platform Anda dan menjalankan (chmod +x jq
):Ini mengekstrak
"name"
atribut dari objek json.jq
beranda mengatakan sepertised
untuk data JSON.sumber
jq
alat yang luar biasa.curl -s https://api.example.com/jobs | jq '.jobs[] | {id, o: .owner.username, dateCreated, s: .status.state}'
Menggunakan Node.js
Jika sistem memiliki simpulterpasang, dimungkinkan untuk menggunakan
-p
cetakan dan-e
mengevakuasi flag skrip denganJSON.parse
untuk menarik nilai apa pun yang diperlukan.Contoh sederhana menggunakan string JSON
{ "foo": "bar" }
dan mengeluarkan nilai "foo":Karena kami memiliki akses ke
cat
dan utilitas lain, kami dapat menggunakan ini untuk file:Atau format lain seperti URL yang berisi JSON:
sumber
node -p -e 'JSON.parse(process.argv[1]).foo' '{ "foo": "bar" }'
curl -s https://api.github.com/users/trevorsenior | node -pe "JSON.parse(require('fs').readFileSync('/dev/stdin').toString()).name"
cat package.json | node -pe 'JSON.parse(fs.readFileSync(0)).version'
Gunakan dukungan JSON Python daripada menggunakan awk!
Sesuatu seperti ini:
sumber
json.load(sys.stdin)['"key']"
sebagai contoh seperti:curl -sL httpbin.org/ip | python -c "import json,sys; print json.load(sys.stdin)['origin']"
.Anda telah bertanya bagaimana cara menembak diri sendiri di kaki dan saya di sini untuk memberikan amunisi:
Anda bisa menggunakan
tr -d '{}'
bukansed
. Tetapi meninggalkan mereka sepenuhnya tampaknya memiliki efek yang diinginkan juga.Jika Anda ingin menghapus tanda kutip luar, pipa hasil dari di atas
sed 's/\(^"\|"$\)//g'
Saya pikir orang lain sudah membunyikan alarm yang cukup. Saya akan berdiri dengan ponsel untuk memanggil ambulans. Api saat siap.
sumber
Menggunakan Bash dengan Python
Buat fungsi bash di file .bash_rc Anda
Kemudian
Berikut adalah fungsi yang sama, tetapi dengan pemeriksaan kesalahan.
Di mana $ # -ne 1 memastikan setidaknya 1 input, dan -t 0 memastikan Anda mengarahkan ulang dari sebuah pipa.
Yang menyenangkan tentang implementasi ini adalah Anda dapat mengakses nilai json bersarang dan mendapatkan json sebagai imbalan! =)
Contoh:
Jika Anda ingin benar-benar mewah, Anda bisa mencetak datanya:
sumber
curl http://foo | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["environment"][0]["name"]'
sys.stdout.write()
jika Anda ingin bekerja dengan kedua python 2 dan 3.getJsonVal() { py -x "json.dumps(json.loads(x)$1, sort_keys=True, indent=4)"; }
TickTick adalah parser JSON yang ditulis dalam bash (<250 baris kode)
Berikut cuplikan penulis dari artikelnya, Bayangkan sebuah dunia di mana Bash mendukung JSON :
sumber
Parsing JSON dengan PHP CLI
Bisa dibilang off topic tetapi karena didahului memerintah pertanyaan ini tetap tidak lengkap tanpa menyebutkan PHP kami yang terpercaya dan setia, apakah saya benar?
Menggunakan contoh JSON yang sama tetapi memungkinkan menetapkannya ke variabel untuk mengurangi ketidakjelasan.
Sekarang untuk kebaikan PHP, menggunakan file_get_contents dan php: // stdin stream wrapper.
atau seperti yang ditunjukkan menggunakan gadget dan aliran yang sudah dibuka di CLI STDIN konstan .
nJoy!
sumber
$argn
sebagai gantinyafgets(STDIN)
$argn
bekerja dengan bendera -E atau -R dan hanya jika konten JSON ada di satu baris ...Versi Bash Asli: Juga berfungsi baik dengan garis miring terbalik (\) dan kutipan (")
sumber
Versi yang menggunakan Ruby dan http://flori.github.com/json/
atau lebih ringkas:
sumber
;
tidak diperlukan di Ruby (itu hanya digunakan untuk pernyataan gabungan yang biasanya berada pada baris terpisah menjadi satu baris).Sayangnya jawaban pilihan teratas yang menggunakan
grep
mengembalikan kecocokan penuh yang tidak berfungsi dalam skenario saya, tetapi jika Anda tahu format JSON akan tetap konstan, Anda dapat menggunakan lookbehind dan lookahead untuk mengekstrak hanya nilai yang diinginkan.sumber
Jika seseorang hanya ingin mengekstraksi nilai dari objek JSON sederhana tanpa perlu struktur bersarang, dimungkinkan untuk menggunakan ekspresi reguler tanpa meninggalkan bash.
Berikut adalah fungsi yang saya definisikan menggunakan bash regular expressions berdasarkan standar JSON :
Peringatan: objek dan array tidak didukung sebagai nilai, tetapi semua tipe nilai lain yang didefinisikan dalam standar didukung. Juga, pasangan akan dicocokkan tidak peduli seberapa dalam dokumen JSON itu asalkan memiliki nama kunci yang persis sama.
Menggunakan contoh OP:
sumber
Ada cara yang lebih mudah untuk mendapatkan properti dari string json. Menggunakan
package.json
file sebagai contoh, coba ini:Kami menggunakan
process.env
karena ini membuat konten file ke node.js sebagai string tanpa risiko konten berbahaya lolos dari kutipan mereka dan diuraikan sebagai kode.sumber
require()
sebenarnya dapat menjalankan kode asing, JSON.parse tidak bisa.JSON.parse()
dan ya, Anda pasti aman ... tapi di sini, runtime JSON menerima konten (tidak tepercaya) di-band dengan kode (tepercaya).JSON.parse()
, Anda juga aman, tetapi itu juga tidak terjadi di sini.JSON.parse()
, ke dalam kode . Anda berasumsi bahwa menempatkan backticks literal akan membuat konten tetap literal, tetapi itu asumsi yang sama sekali tidak aman, karena backticks literal dapat ada dalam konten file (dan dengan demikian variabelnya), dan dengan demikian dapat mengakhiri penawaran dan memasuki konteks tanpa tanda kutip di mana nilai dieksekusi sebagai kode.Sekarang Powershell adalah platform silang, saya pikir saya akan melempar keluar ke sana, karena saya merasa itu cukup intuitif dan sangat sederhana.
ConvertFrom-Json mengubah JSON menjadi objek kustom Powershell, sehingga Anda dapat dengan mudah bekerja dengan properti dari titik itu ke depan. Misalnya, jika Anda hanya menginginkan properti 'id', lakukan saja ini:
Jika Anda ingin meminta semuanya dari dalam Bash, maka Anda harus menyebutnya seperti ini:
Tentu saja ada cara Powershell murni untuk melakukannya tanpa keriting, yang akan menjadi:
Akhirnya, ada juga 'ConvertTo-Json' yang mengubah objek kustom menjadi JSON dengan mudah. Ini sebuah contoh:
Yang akan menghasilkan JSON bagus seperti ini:
}
Memang, menggunakan shell Windows di Unix agak sembrono tapi Powershell sangat pandai dalam beberapa hal, dan parsing JSON dan XML adalah beberapa di antaranya. Ini halaman GitHub untuk versi lintas platform https://github.com/PowerShell/PowerShell
sumber
Seseorang yang juga memiliki file xml, mungkin ingin melihat Xidel saya . Ini adalah prosesor JSONiq bebas cli, dependensi . (yaitu ia juga mendukung XQuery untuk pemrosesan xml atau json)
Contoh dalam pertanyaan adalah:
Atau dengan sintaks ekstensi non standar saya sendiri:
sumber
xidel -s https://api.github.com/users/lambda -e 'name'
(atau-e '$json/name'
, atau-e '($json).name'
).Saya tidak dapat menggunakan jawaban apa pun di sini. Tidak ada jq yang tersedia, tidak ada susunan shell, tidak ada yang menyatakan, tidak ada grep -P, tidak ada tampilan di belakang dan lookahead, tidak ada Python, tidak Perl, tidak ada Ruby, tidak - bahkan tidak Bash ... Jawaban yang tersisa tidak bekerja dengan baik. JavaScript kedengarannya familier, tetapi kaleng itu mengatakan Nescaffe - jadi itu tidak boleh, :) Bahkan jika tersedia, untuk kebutuhan sederhana saya - mereka akan berlebihan dan lambat.
Namun, sangat penting bagi saya untuk mendapatkan banyak variabel dari json diformat dari modem saya. Saya melakukannya di sh dengan BusyBox sangat dipangkas di router saya! Tidak ada masalah menggunakan awk saja: cukup setel pembatas dan baca datanya. Untuk satu variabel, itu saja!
Ingat saya tidak punya array? Saya harus menetapkan dalam parsing awk data ke 11 variabel yang saya butuhkan dalam skrip shell. Ke mana pun saya melihat, itu dikatakan sebagai misi yang mustahil. Tidak masalah dengan itu juga.
Solusi saya sederhana. Kode ini akan: 1) mem-parsing file .json dari pertanyaan (sebenarnya, saya telah meminjam sampel data yang berfungsi dari jawaban yang paling banyak dipilih) dan memilih data yang dikutip, ditambah 2) membuat variabel shell dari dalam awk yang menugaskan shell bernama gratis nama variabel.
Tidak ada masalah dengan kekosongan di dalam. Dalam penggunaan saya, perintah yang sama mem-parsing output baris tunggal yang panjang. Karena eval digunakan, solusi ini hanya cocok untuk data tepercaya. Sangat mudah untuk menyesuaikannya dengan pengambilan data yang tidak dikutip. Untuk sejumlah besar variabel, gain kecepatan marginal dapat dicapai dengan menggunakan else if. Kurangnya array jelas berarti: tidak ada banyak catatan tanpa mengutak-atik ekstra. Tetapi di mana array tersedia, mengadaptasi solusi ini adalah tugas yang sederhana.
@maikel sed jawaban hampir berfungsi (tapi saya tidak bisa mengomentarinya). Untuk data yang diformat dengan baik - berfungsi. Tidak terlalu banyak dengan contoh yang digunakan di sini (kutipan yang hilang membuangnya). Ini rumit dan sulit untuk dimodifikasi. Plus, saya tidak suka harus membuat 11 panggilan untuk mengekstrak 11 variabel. Mengapa? Saya menghitung 100 loop mengekstraksi 9 variabel: fungsi sed mengambil 48,99 detik dan solusi saya mengambil 0,91 detik! Tidak adil? Melakukan hanya satu ekstraksi 9 variabel: 0,51 vs 0,02 detik.
sumber
Anda dapat mencoba sesuatu seperti ini -
sumber
Anda bisa menggunakan
jshon
:sumber
inilah salah satu cara Anda dapat melakukannya dengan awk
sumber
Untuk penguraian JSON yang lebih kompleks, saya sarankan menggunakan modul python jsonpath (oleh Stefan Goessner) -
sudo easy_install -U jsonpath
Contoh file.json (dari http://goessner.net/articles/JsonPath ) -
Parse it (ekstrak semua judul buku dengan harga <10) -
Akan menampilkan -
CATATAN: Baris perintah di atas tidak termasuk pengecekan kesalahan. untuk solusi lengkap dengan pengecekan kesalahan, Anda harus membuat skrip python kecil, dan bungkus kodenya dengan coba-kecuali.
sumber
jsonpath
jadi instaljsonpath_rw
saja, jadi di sini ada sesuatu yang serupa yang dapat Anda coba jika hal di atas tidak berhasil: 1)/usr/bin/python -m pip install jsonpath-rw
2)cat ~/trash/file.json | /usr/bin/python -c "from jsonpath_rw import jsonpath, parse; import sys,json; jsonpath_expr = parse('store.book[0]'); out = [match.value for match in jsonpath_expr.find(json.load(sys.stdin))]; print out;"
(Saya menggunakan path lengkap ke python binary karena saya mengalami beberapa masalah dengan beberapa ular sanca terpasang).Jika Anda memiliki php :
Sebagai contoh:
kami memiliki sumber daya yang menyediakan kode iso negara kepada json: http://country.io/iso3.json dan kami dapat dengan mudah melihatnya di shell dengan curl:
tetapi terlihat sangat tidak nyaman, dan tidak dapat dibaca, lebih baik mengurai json dan melihat struktur yang dapat dibaca:
Kode ini akan mencetak sesuatu seperti:
jika Anda memiliki array bersarang, output ini akan terlihat jauh lebih baik ...
Semoga ini bisa membantu ...
sumber
Ada juga alat pemrosesan JSON CLI yang sangat sederhana namun kuat fx - https://github.com/antonmedv/fx
Contohnya
Gunakan fungsi anonim:
Jika Anda tidak meneruskan fungsi anonim param => ..., kode akan secara otomatis diubah menjadi fungsi anonim. Dan Anda bisa mendapatkan akses ke JSON dengan kata kunci ini:
Atau cukup gunakan sintaks dot juga:
Anda dapat melewati sejumlah fungsi anonim untuk mengurangi JSON:
Anda dapat memperbarui JSON yang ada menggunakan operator spread:
JavaScript sederhana . Tidak perlu mempelajari sintaks baru.
PEMBARUAN 2018-11-06
fx
sekarang memiliki mode interaktif ( ! )https://github.com/antonmedv/fx
sumber
Ini adalah jawaban lain
bash
&python
hibrida. Saya memposting jawaban ini karena saya ingin memproses output JSON yang lebih kompleks, tetapi, mengurangi kompleksitas aplikasi bash saya. Saya ingin membuka objek JSON berikut dari http://www.arcgis.com/sharing/rest/info?f=json dibash
:Dalam contoh berikut, saya membuat implementasi
jq
danunquote
pengungkit saya sendiripython
. Anda akan perhatikan bahwa setelah kami mengimpor objek pythonjson
ke kamus python, kami dapat menggunakan sintaksis python untuk menavigasi kamus. Untuk menavigasi di atas, sintaksnya adalah:data
data[ "authInfo" ]
data[ "authInfo" ][ "tokenServicesUrl" ]
Dengan menggunakan sihir di bash, kami menghilangkan
data
dan hanya memasok teks python ke kanan data, yaitujq
jq '[ "authInfo" ]'
jq '[ "authInfo" ][ "tokenServicesUrl" ]'
Catatan, tanpa parameter,
jq
bertindak sebagai prettifier JSON. Dengan parameter, kita dapat menggunakan sintaksis python untuk mengekstraksi apa pun yang kita inginkan dari kamus termasuk menavigasi subtitle dan elemen array.Berikut ini contoh yang menunjukkan hal di atas:
sumber
Saya telah melakukan ini, "mem-parsing" respons json untuk nilai tertentu, sebagai berikut:
Jelas, $ url di sini akan menjadi url twitter, dan $ var akan menjadi "teks" untuk mendapatkan respons untuk var itu.
Sungguh, saya pikir satu-satunya hal yang saya lakukan OP telah ditinggalkan adalah grep untuk baris dengan variabel spesifik yang dia cari. Awk meraih item kedua di telepon, dan dengan sed saya melepaskan tanda kutip.
Seseorang yang lebih pintar daripada saya mungkin bisa melakukan seluruh pemikiran dengan awk atau grep.
Sekarang, Anda bisa melakukan semuanya hanya dengan:
jadi, tidak awk, tidak grep ... Saya tidak tahu mengapa saya tidak memikirkan itu sebelumnya. Hmmm...
sumber
grep | awk | sed
dansed | sed | sed
pipa yang antipatterns boros. Contoh terakhir Anda dapat dengan mudah ditulis ulangcurl "$url" | sed '/text/!d;s/\"text\"://g;s/\"//g;s/\ //g'
tetapi seperti yang telah ditunjukkan oleh orang lain, ini adalah pendekatan yang rentan kesalahan dan rapuh yang seharusnya tidak direkomendasikan.Parsing JSON menyakitkan dalam skrip shell. Dengan bahasa yang lebih tepat, buat alat yang mengekstraksi atribut JSON dengan cara yang konsisten dengan konvensi skrip shell. Anda dapat menggunakan alat baru Anda untuk menyelesaikan masalah skrip shell langsung dan kemudian menambahkannya ke kit Anda untuk situasi mendatang.
Sebagai contoh, pertimbangkan alat jsonlookup sehingga jika saya mengatakan
jsonlookup access token id
itu akan mengembalikan atribut id yang didefinisikan dalam token atribut yang didefinisikan dalam akses atribut dari stdin, yang mungkin merupakan data JSON. Jika atribut tidak ada, alat tidak mengembalikan apa pun (status keluar 1). Jika penguraian gagal, keluar status 2 dan pesan ke stderr. Jika pencarian berhasil, alat ini mencetak nilai atribut.Setelah membuat alat unix untuk tujuan yang tepat dalam mengekstraksi nilai JSON Anda dapat dengan mudah menggunakannya dalam skrip shell:
Bahasa apa pun akan dilakukan untuk implementasi jsonlookup . Berikut ini adalah versi python yang cukup ringkas:
sumber
Garis dua yang menggunakan python. Ini bekerja sangat baik jika Anda sedang menulis file .sh tunggal dan Anda tidak ingin bergantung pada file .py lainnya. Ini juga memanfaatkan penggunaan pipa
|
.echo "{\"field\": \"value\"}"
dapat digantikan oleh apapun yang mencetak json ke stdout.sumber
Ini adalah usecase yang bagus untuk pythonpy :
sumber