2015-10-20 10 views
87

Kabuk boru hattında "normal" davranması için jq elde edemiyorum. Örneğin: jq yılındaKabuk boru hattında `jq` nasıl kullanılır?

$ curl -s https://api.github.com/users/octocat/repos | jq | cat 

sonuçlar sadece * kendi yardım metnini yazdırmak. buna uçbirimlerden çalıştırılıyor değil belirlerse

$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json 

jq kasten kefaletini mi: Ben bir dosyaya jq 'ın çıkışını yönlendirmek çalışırsanız aynı şey olur? Bu davranışı nasıl engelleyebilirim? jq bir boru hattında kullanabilir miyim?


* (Bu örnek, bir useless use of cat içeriyor gerçekleştirmek, aynı yalnızca açıklama amaçlı olduğunu) Bir bağımsız değişken olarak bir filtre sağlamanız gerekmektedir

cevap

158

. jq varsayılan olarak sağlayan oldukça baskıdan daha değiştirilmemiş başka aracılığıyla JSON geçmek için, kimlik filtresi . kullanın:

curl -s https://api.github.com/users/octocat/repos | jq '.' | cat 
+0

Neden "kedi" için boru? Gerçekten gerekli mi? –

+15

OP'in sahip olduğu için onu bıraktım; Sanırım, jq'nin hem bir borudan okuduğunu hem de başka bir boruya yazdığını gösteren bir yer tutucu var. Eğer arzu sadece 'jq' çıktısını görmekse, o zaman 'kedinin kendisi gereksizdir. – chepner

+3

(1) jq sürüm 1.5 geliştirildi, böylece. Bunun gibi durumlarda gereksizdir. (2) "." Demeye gerek yoktur. – peak

3

Bir kullanım durumu kendim buldum yanı sıkça yapıyor JSON verilerini için inşa nasıl" dır diğer kabuk komutları, örneğin curl? Bunu yolu --null-input/-n seçeneğini kullanarak geçerli:

hiç bir giriş okuma! Bunun yerine, filtre, giriş olarak null kullanılarak bir kez çalıştırılır. Bu, jq'u basit bir hesap makinesi olarak kullanırken veya JSON verilerini sıfırdan oluştururken kullanışlıdır.

Ve curl içine geçen bir örnek:

jq -n '{key: "value"}' | curl -d @- \ 
    --url 'https://some.url.com' \ 
    -H 'Content-Type: application/json' \ 
    -H 'Accept: application/json' 
+4

Bu harika, ama bu soruyla ne kadar ilgili olduğundan emin değil misiniz? – mgalgs

+1

@mgalgs Bazı verileri filtrelemek için orta/sonunda değil, kabuk boru hattının başlangıcında 'jq' üretmek/kullanmak istediğimi buldum.'Curl' örneği temel bir şeydir, ancak kendimi sık sık JSON verisinde "curl" yazarak ve doğru alıntı yapmaya çalışarak buldum. Bu yüzden başkalarına da faydalı olabileceğini düşündüm. – mkobit