2015-12-27 29 views
18

nesneler akımını dönüştürmek istiyorumJq'deki nesnelerin sırasının tek bir nesnede nasıl birleştirilir? Bir nesne içine</p> <pre><code>{ "a": "green", "b": "white" } { "a": "red", "c": "purple" } </code></pre> <p>:

da
{ 
    "a": "red", 
    "b": "white", 
    "c": "purple" 
} 

, nasıl bir diziye aynı sekansı kaydırılabilir?

[ 
    { 
     "a": "green", 
     "b": "white" 
    }, 
    { 
     "a": "red", 
     "c": "purple" 
    } 
] 

Ne yazık ki, manuel ciddi kapsam eksik olan ve googling ya cevaplar bulmak değildir.

+0

Başlamak için bu girişi nasıl aldınız? dizisi, bir şey gibi filtrelenen bir jq komutuyla oluşturulmuş dizidir. [], veya gerçekten aldığınız girişin asıl durumu mu? Eğer geçerli JSON ile başlarken çok sık olan eski ise, sırayla sonuçlanan jq komutu muhtemelen boruya girmek yerine tekrarlı işlem komutunu [ve] ile çevreleyen bir diziyi çıkarmak için kolaylıkla değiştirilebilir. birlikte iki jq komutu, ikincisi -s kullanacak – mwag

cevap

26

Girişiniz bir nesne akışıysa, "gevrek" olmalıdır, örn. bunları birleştirmek için -s komut satırı seçeneğini kullanarak. Bir dizi oluşturma,

jq -s add 

ikinci problem için: Böylece

kullanımı, giriş akımındaki nesneleri birleştirmek

jq -s . 

(var ki başka alternatifler vardır, ancak bu basit ve jq'nin en son sürümüne gerek yoktur. jq 1.5 ile 'girişleri' kullanabilirsiniz, örneğin

+0

Aslında, 'jq -s' add'' istediğimi yapar. Teşekkürler! –

+2

@JenniferM. Bir * Teşekkür * yorum bırakarak yerine [Ayrıca bir yanıtı kabul edebilirsiniz] (http://stackoverflow.com/help/someone-answers) – rene

+0

Ne zaman bir ifade sonucu dizisi ortaya çıkar ..? gibi | add 'ne istediğimi yapmıyor .. – Kaos

0

Başka bir alternatif slurping kullanmaktır.değişken. jq '[inputs] | add' gibi, tüm girdi nesneleri birleştirilmiş bir nesne üretecektir.