Jackson'ı ayrıştırmak için "jq" ile tanıştım.
Özelliklerden birinin kendisinin bir json dizesi olduğu bir json yanıtı üreten bir hizmetle çalışıyorum. Bu alıntılanan değeri geçerli bir json dizgisine nasıl dönüştürebilirim, böylece daha sonra jq ile işleyebilirim?
Örneğin, düz yazdırılmış düz jsonunu "jq" dan görüntülerseniz, çıktının kısa bir kısmı:
"someJsonString": "{\"date\":\"2018-01-08\", ...
Bu özelliğin değerini elde etmek için jq kullanabilirim, ancak "unescaping" yaparak alıntılanan dizgiyi geçerli bir json'a dönüştürmem gerekiyor.
Galiba açılışı ve çift tırnak işaretini sonlandırarak ve tüm ters eğik çizgileri (" sed -e 's/^"//' -e 's/"$//' -e 's/\\//g'
") kaldırarak onu boruya sokabiliyorum . Bu iş gibi görünüyor, ancak bu en sağlam çözüm gibi görünmüyor.
Güncelleme :
Yaptıklarımı biraz daha açıklığa kavuşturmak için, işte denedim ne olduğunu gösteren birkaç örnek:
% curl -s -q -L 'http://.../1524.json' | jq '.results[0].someJsonString' | jq .
"{\"date\":\"2018-01-08\",...
% echo $(curl -s -q -L 'http:/.../1524.json' | jq '.results[0].someJsonString') | jq .
"{\"date\":\"2018-01-08\",...
Güncelleme :
İşte tamamen bağımsız bir örnek:
% cat stuff.json | jq .
{
"stuff": "{\"date\":\"2018-01-08\"}"
}
% cat stuff.json | jq '.stuff'
"{\"date\":\"2018-01-08\"}"
% cat stuff.json | jq '.stuff' | jq .
"{\"date\":\"2018-01-08\"}"
Güncelleme :
Bu son çıktıyı gerçek bir jq ifadesiyle işlemeyi denediysem, şöyle bir şey yapar:
% cat stuff.json | jq '.stuff' | jq '.date'
assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.5-3.x86_64/src/jq-1.5/util.c", line 371, function: jq_util_input_get_position
Aborted (core dumped)
echo $(jq statement here)
?
jq
almak için kullanırsanız , çıkmadan döndürür mü? Eğer öyleyse, sadece taze içine boru .jq