Mam tego Jsona
{
"users": [
{
"first": "Stevie",
"last": "Wonder"
},
{
"first": "Michael",
"last": "Jackson"
}
]
}
Za pomocą jq chciałbym wyświetlać imię i nazwisko szeregowo. Tak jak -
Stevie Wonder
Michael Jackson
Tak daleko zaszedłem -
jq '.users[].first, .users[].last'
Ale wyświetla się
"Stevie"
"Michael"
"Wonder"
"Jackson"
Zwróć uwagę na następujące -
- Podwójne cytaty, których nie chcę.
- Zwrot karetki, którego nie chcę.
- Jest pomieszane. Moje zapytanie wyświetla najpierw wszystkie imiona, a następnie wszystkie nazwiska. Chcę jednak pierwszej, ostatniej pary.
Możesz użyć dodawania do łączenia ciągów.
Powyższe prace przy obu
first
ilast
są ciągiem. Jeśli wyodrębniasz różne typy danych (numer i ciąg), musimy przekonwertować na równoważne typy. Odnosząc się do rozwiązania tego pytania . Na przykład.źródło
" "
do liczby. Odpowiedź Erica daje lepszy wynik w tej sprawie.(.numA|tostring) + " " + (.numB|tostring)
powinien działać. Lub interpolacja użycie ciąg zamiast:"\(.numA) \(.numB)"
.jq '.users[] | .first + " " + .last'
, działało to bardzo dobrze, ale spowodowało nową linię między wartością.first
a.last
. Zmieniłem" "
się"@"
, a następnie zrobiłsed 's/@/ /g'
na wyjściu uzyskać „John Smith” jako wyjście. Coś w tym stylu:jq '.users[] | .first + "@" + .last' | sed 's/@/ /g'
źródło
Podczas gdy obie powyższe odpowiedzi działają dobrze, jeśli klucz, wartość są łańcuchami, miałem sytuację, aby dołączyć ciąg i liczbę całkowitą (błędy JQ przy użyciu powyższych wyrażeń)
Wymagania: Aby utworzyć adres URL poniżej JSON
Rozwiązanie:
źródło
\(...)
jest interpolacją ciągów. Tutaj zamienia liczbę.ServicePort
w ciąg znaków. Zamiast+
znaków można zastosować interpolację, aby skrócić to rozwiązanie.Spowoduje to utworzenie tablicy nazw
źródło
Byłem bardzo blisko tego, co chciałem, robiąc coś takiego
Dane wyjściowe są na tyle blisko, że yaml zwykle pozwala bez problemu importować je do innych narzędzi. (Nadal szukam sposobu, aby wyeksportować podzbiór wejściowego pliku json)
źródło
moje podejście będzie (twój przykład JSON nie jest dobrze sformułowany .. zgadnij, że to tylko próbka)
zwraca coś takiego
i grep wyjście z wyrażeniem regularnym.
źródło