2016-02-02 14 views
21

ayrıştırmak.kullanın jq ben gibi bir JSON yapısını ayrıştırmak için <code>jq</code> almaya çalışıyorum bir JSON Dize

Yani, $ jq [.c] myFile.json | jq [.id]

çizgisinde bir şey var Ama bu jq: error: Cannot index string with string

.c çıkışı bir dize değil, daha JSON olmasıdır çöker. Bu dizeyi ayrıştırmak için jq'yi nasıl alabilirim?

Benim ilk çözüm, tüm kaçış karakter (\":\", \",\" ve \") yerine sed kullanmaktır ama bu dağınık, ben bunu yapmak jq yerleşik bir yolu vardır varsayalım?

Teşekkürler!

düzenleme: Ayrıca burada mevcut jq sürümü:

$ jq --version 
jq version 1.3 

Ben gerekirse bunu güncellemek sanırım.

jq '.c | fromjson | .id' myFile.json 

fromjson 1.4 sürümü eklendi

+0

Bu soru, eğer arıyorsanız, aynı zamanda yardımcı olur: "jq kullanarak json dize unescape?" – k0pernikus

cevap

27

jq için bu fromjson yerleşiği vardır.

+2

Teşekkürler. Bu çalışıyor. Bu cevabı kabul edeceğim, çünkü daha 'idiomaitik' hissediyorum. Şerefe. –

+2

Bu, doğru cevabı işaretlemelidir. –

+0

@ColinGrogan lütfen yapın. – vbence

18

Sen (-r) karakterlerinin geri edeceğini çiğ çıkışını kullanabilirsiniz:

jq -r .c myfile.json | jq .id 

EK: Bu JQ 1.3 ve üstü çalışan bir avantaja sahiptir; Gerçekten de, -r seçeneğine sahip jq'nin her sürümünde çalışmalıdır.

+0

Mükemmel, teşekkürler! –