Czy ktoś może polecić uniksowy parser JSON (wybierz swój smak), którego można by użyć do introspekcji wartości z odpowiedzi JSON w potoku?
json
parsing
unix
configuration
Jé Queue
źródło
źródło
npm install -g ramda-cli
Odpowiedzi:
Możesz użyć tego parsera wiersza poleceń (który możesz umieścić w aliasie bash, jeśli chcesz), używając modułów wbudowanych w rdzeń Perla:
perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'
źródło
perl -e "use JSON; print to_json( decode_json(<>), { pretty => 1 } )"
Wolę,
python -m json.tool
który domyślnie wydaje się być dostępny w większości systemów operacyjnych * nix.$ echo '{"foo":1, "bar":2}' | python -m json.tool { "bar": 2, "foo": 1 }
Uwaga: w zależności od wersji Pythona wszystkie klucze mogą być sortowane alfabetycznie, co może być dobre lub nie. W Pythonie 2 domyślnie sortowano klucze, podczas gdy w Pythonie 3.5+ nie są one już sortowane automatycznie, ale masz możliwość jawnego sortowania według klucza:
$ echo '{"foo":1, "bar":2}' | python3 -m json.tool --sort-keys { "bar": 2, "foo": 1 }
źródło
json.tool
to tylko krótka ręka do ładnego print json. Jeśli potrzebujesz wyodrębnić / manipulować danymi json w skrypcie powłoki,jq
json.tool
robi tylko dwie rzeczy: walidację i ładnie wypisuje json. NIE dokonuje introspekcji wartości w json, tak jakjq
robi.Jeśli szukasz przenośnego narzędzia skompilowanego w C:
http://stedolan.github.com/jq/
Ze strony internetowej:
Samouczek : http://stedolan.github.com/jq/tutorial/
Podręcznik : http://stedolan.github.com/jq/manual/
Pobierz : http://stedolan.github.com/jq/download/
źródło
apt install jq
.jq
.Stworzyłem moduł specjalnie zaprojektowany do manipulacji JSON z linii poleceń:
https://github.com/ddopson/underscore-cli
Pozwala naprawdę łatwo robić potężne rzeczy:
cat earthporn.json | underscore select '.data .title' # [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]', # 'New town, Edinburgh, Scotland [4320 x 3240]', # 'Sunrise in Bryce Canyon, UT [1120x700] [OC]', # ... # 'Kariega Game Reserve, South Africa [3584x2688]', # 'Valle de la Luna, Chile [OS] [1024x683]', # 'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ] cat earthporn.json | underscore select '.data .title' | underscore count # 25 underscore map --data '[1, 2, 3, 4]' 'value+1' # prints: [ 2, 3, 4, 5 ] underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)' # [ 4, 8 ] echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)' # key = foo # key = bar underscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name # [ 'moe', 'larry', 'curly' ] underscore keys --data '{name : "larry", age : 50}' # [ 'name', 'age' ] underscore reduce --data '[1, 2, 3, 4]' 'total+value' # 10
Ma też jeden z najlepszych dostępnych programów formatujących JSON „inteligentnych białych znaków”:
Jeśli masz jakieś prośby o dodanie funkcji, skomentuj ten post lub dodaj problem na githubie. Chętnie nadam priorytet funkcjom, które są potrzebne członkom społeczności.
źródło
wget
każdy adres URL.underscore
do analizowania zagnieżdżonego pliku JSON z zagnieżdżonymi obiektami i tablicami?Checkout TickTick .
To prawdziwy parser Bash JSON.
#!/bin/bash . /path/to/ticktick.sh # File DATA=`cat data.json` # cURL #DATA=`curl http://foobar3000.com/echo/request.json` tickParse "$DATA" echo ``pathname`` echo ``headers["user-agent"]``
źródło
Istnieje również zestaw narzędzi do przetwarzania wiersza poleceń JSON, jeśli masz na stosie node.js i npm.
I jeszcze jedno polecenie "json" do masowania JSON w linii poleceń Uniksa.
A oto inne alternatywy:
Powiązane: Narzędzie wiersza poleceń do analizowania danych wejściowych JSON dla systemu Unix?
źródło
npm install json
.json
wydaje się być teraz zajęty przez zupełnie inny pakiet.Czy ktoś wspomniał o Jshon lub JSON.sh?
https://github.com/keenerd/jshon
potokiem json do niego i przechodzi przez obiekty json i wyświetla ścieżkę do bieżącego obiektu (jako tablica JSON), a następnie obiekt, bez spacji.
http://kmkeen.com/jshon/
Jshon ładuje tekst json ze stdin, wykonuje akcje, a następnie wyświetla ostatnią akcję na stdout, a także został utworzony jako część zwykłego potoku przetwarzania tekstu.
źródło
brew install jshon
,cat *.json | jshon
Możesz spróbować jsawk zgodnie z sugestią zawartą w tej odpowiedzi .
Naprawdę możesz jednak stworzyć szybki skrypt w Pythonie, aby to zrobić.
źródło
W przypadku Bash / Python , oto podstawowe opakowanie wokół Pythona
simplejson
:json_parser() { local jsonfile="my_json_file.json" local tc="import simplejson,sys; myjsonstr=sys.stdin.read(); "` `"myjson=simplejson.loads(myjsonstr);" # Build python print command based on $@ local printcmd="print myjson" for (( argn=1; argn<=$#; argn++ )); do printcmd="$printcmd['${!argn}']" done local result=$(python -c "$tc $printcmd.keys()" <$jsonfile 2>/dev/null \ || python -c "$tc $printcmd" <$jsonfile 2>/dev/null) # For returning space-separated values echo $result|sed -e "s/[]|[|,|']//g" #echo $result }
Naprawdę obsługuje tylko dane w stylu zagnieżdżonego słownika, ale działa zgodnie z potrzebami i jest przydatne do przechodzenia przez json. Prawdopodobnie dałoby się to dostosować do smaku.
W każdym razie coś wyhodowanego w domu dla tych, którzy nie chcą czerpać z jeszcze jednej zewnętrznej zależności. Oczywiście z wyjątkiem Pythona.
Dawny.
json_parser {field1} {field2}
uruchomi sięprint myjson['{field1}']['{field2}']
, uzyskując klucze lub powiązane z nimi wartości{field2}
, oddzielone spacjami.źródło
Właśnie stworzyłem jkid, który jest małym eksploratorem json wiersza poleceń, który stworzyłem, aby łatwo eksplorować duże obiekty json. Obiekty można eksplorować „poprzecznie”, a opcja „podgląd” pozwala uniknąć przepełnienia konsoli.
$ echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json $ jkid . eyes test3.json object[.]["eyes"] { "bob": "brown", "john": "green" }
źródło
jkid
na Macu?