Saya mencoba jq
mengurai struktur JSON seperti:
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
Artinya, elemen dalam JSON adalah string dengan json yang lolos.
Jadi, saya memiliki sesuatu di sepanjang garis
$ jq [.c] myFile.json | jq [.id]
Tapi itu bertentangan dengan jq: error: Cannot index string with string
Ini karena keluaran dari .c adalah string, bukan JSON lainnya. Bagaimana cara mendapatkan jq untuk mengurai string ini?
Solusi awal saya adalah menggunakan sed untuk mengganti semua karakter escape ( \":\"
, \",\"
dan \"
) tapi itu berantakan, saya berasumsi ada cara jq
untuk melakukan ini?
Terima kasih!
edit: Juga, versi jq yang tersedia di sini adalah:
$ jq --version
jq version 1.3
Saya kira saya bisa memperbaruinya jika diperlukan.
Jawaban:
jq memiliki bawaan
fromjson
untuk ini:jq '.c | fromjson | .id' myFile.json
fromjson
telah ditambahkan di versi 1.4.sumber
fromjson
fitur tersebut tidak tersedia. Dengan kata lain, meskipun jawaban ini menarik, itu tidak menjawab pertanyaan itu.jq 'fromjson | .' myfile
"{\"key\":1, \"word\":\"cat\"}"
Anda dapat menggunakan keluaran mentah (-r) yang akan menghilangkan karakter:
jq -r .c myfile.json | jq .id
TAMBAHAN: Ini memiliki keuntungan karena berfungsi di jq 1.3 dan lebih tinggi; memang, itu harus bekerja di setiap versi jq yang memiliki opsi -r.
sumber