Biorąc pod uwagę następujące xample.json
;jq: zagnieżdżony obiekt, wypakuj identyfikator najwyższego poziomu i podnieś wartość z wewnętrznego obiektu
[
{
"id": 12345678,
"stuff": { "book": "shelf", "hook": "line", "took": "off", "info-spec": 12 },
"votes": 23
},
{
"id": 12345679,
"stuff": { "book": "maker", "hook": "sinker", "took": "pisin", "info-spec": 23 },
"votes": 1
}
]
mogę wyodrębnić id
i votes
łatwo:
$ jq '.[] | { id, votes }' xample.json
{
"votes": 23,
"id": 12345678
}
{
"votes": 1,
"id": 12345679
}
Ale co by kwerenda wyglądać wyodrębnić id
i stuff.info-spec
? Oczywistą (do mnie) składnia nie działa w ogóle:
$ jq '.[] | { id, stuff.info-spec }' xample.json
error: syntax error, unexpected '.', expecting '}'
.[] | { id, stuff.info-spec }
^
1 compile error
Próbowałem stuff[info-spec]
i stuff["info-spec"]
jak dobrze, ale cóż, ja po prostu nie wydaje się mieć żadnego pojęcia, jak to powinno być zrobione.
Myślnik w nazwie klucza wydaje się komplikować sprawy jeszcze bardziej, ale moje ograniczone zrozumienie jest takie, że mogę obejść to z podwójnymi cytatami.
$ sed 's/votes/vo-tes/g' xample.json | jq '.[] | { id, "vo-tes" }'
podaje oczekiwany wynik (tj. Podobnie jak powyżej bez kreski w "vo-tes").
można wyodrębnić book
:
$ jq '.[] | .stuff.book' xample.json
ale znowu nie może dowiedzieć się, składnię id
i book
; ale również, że nie można wyodrębnić info-spec
z tej samej składni:
$ jq '.[] | .stuff."info-spec"' xample.json
error: syntax error, unexpected QQSTRING_START, expecting IDENT
.[] | .stuff."info-spec"
^
1 compile error
Gdybym wyjąć cytaty, komunikat o błędzie jest (przewidywalnie) inna:
$ jq '.[] | .stuff.info-spec' xample.json
error: spec is not defined
.[] | .stuff.info-spec
^^^^
1 compile error
Ale hej, to działa:
$ jq '.[] | .stuff["info-spec"] ' xample.json
12
23
My sygnał wyjściowy w tym przykładzie, a następnie,
{
"info-spec": 12,
"id": 12345678
}
{
"info-spec": 23,
"id": 12345679
}
Spojrzałem na FAQ i jq
Cookbook, ale nie mogę znaleźć nic na temat składni do "podnoszenia" przedmiotu z wewnątrz obiektu wewnątrz innego obiektu.
Ciągle mam 1.2. – tripleee
tak, właśnie edytowane z tym: https://github.com/stedolan/jq/issues/38 –