Kaip aš galiu spausdinti JSON į skripto scenarijų?

Ar yra (unix) scenarijų apvalkalas, skirtas JSON formatavimui suprantama forma?

Iš esmės, noriu, kad jis konvertuotų:

 { "foo": "lorem", "bar": "ipsum" } 

... į kažką panašaus į:

 { "foo": "lorem", "bar": "ipsum" } 
2628
09 дек. AnC yra nustatytas gruodžio 9 d. 2008-12-09 11:20 '08 at 11:20 2008-12-09 11:20
@ 54 atsakymai
  • 1
  • 2

Naudodami „Python 2“ galite 6:

 python -m json.tool my_json.json 

jei JSON yra iš interneto šaltinio, pvz., API, galite naudoti

 alias prettyjson='python -m json.tool' 

Dar daugiau patogumo, kai truputį įvedėte, kad ją paruoštumėte:

3909
17 дек. Atsakymą Bycroft pateikė gruodžio 17 d 2009-12-17 12:48 '09, 12:48, 2009-12-17 12:48

Galite naudoti: jq

Tai labai paprasta naudoti ir puikiai veikia! Jis gali dirbti su labai didelėmis JSON struktūromis, įskaitant srautus. Čia rasite jų vadovėlius.

Štai pavyzdys:

border=0
 $ jq . <<< '{ "foo": "lorem", "bar": "ipsum" }' { "bar": "ipsum", "foo": "lorem" } 

Kitaip tariant:

 $ echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . { "bar": "ipsum", "foo": "lorem" } 
743
05 марта '13 в 21:34 2013-03-05 21:34 atsakymą pateikė Vita Pluvia kovo 5 d. 13 d. 21:34 2013-03-05 21:34

JSON.stringify JSON.stringify „Space“ argumentą, JSON.stringify spausdintumėte JSON „javascript“.

Pavyzdžiai:

 // Indent with 4 spaces JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4); // Indent with tabs JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, '\t'); 

Iš „Unix“ komandų eilutės su „nodejs“ nurodykite komandų eilutėje „Json“:

 $ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \ '{"foo":"lorem","bar":"ipsum"}' 

Grąžina:

 { "foo": "lorem", "bar": "ipsum" } 

Iš „Unix“ komandų eilutės su „Node.js“ nurodykite failo pavadinimą, kuriame yra JSON, ir naudojant keturių skyrių įtrauką:

 $ node -e "console.log(JSON.stringify(JSON.parse(require('fs') \ .readFileSync(process.argv[1])), null, 4));" filename.json 

Vamzdžių naudojimas:

 echo '{"foo": "lorem", "bar": "ipsum"}' | node -e \ "\ s=process.openStdin();\ d=[];\ s.on('data',function(c){\ d.push(c);\ });\ s.on('end',function(){\ console.log(JSON.stringify(JSON.parse(d.join('')),null,2));\ });\ " 
365
12 июля '10 в 16:00 2010-07-12 16:00 atsakymas pateikiamas Somu liepos 12 d., 10 val., 4:00, 2010-07-12 16:00

Parašiau įrankį, turintį vieną iš geriausių protingų baltų formatorių. Tai suteikia daugiau skaitymo ir mažiau detalios produkcijos nei daugelis kitų parinkčių.

pabraukimas

Štai kaip atrodo „protingas baltas“:

2019

Aš paprastai tiesiog:

 echo '{"test":1,"test2":2}' | python -mjson.tool 

Ir išrinkti pasirinktus duomenis (šiuo atveju „testas“):

 echo '{"test":1,"test2":2}' | python -c 'import sys,json;data=json.loads(sys.stdin.read()); print data["test"]' 

Jei JSON duomenys yra faile:

 python -mjson.tool filename.json 

Jei norite tai padaryti iš karto naudodami curl komandinėje eilutėje, naudodami autentifikavimo raktą:

 curl -X GET -H "Authorization: Token wef4fwef54te4t5teerdfgghrtgdg53" http://testsite/api/ | python -mjson.tool 
171
01 нояб. atsakymas duotas locojay 2011-11-01 04:19 '11 at 4:19 2011-11-01 04:19

Dėka JF Sebastiano, labai naudingų patarimų, čia yra šiek tiek pažengęs scenarijus.

 #!/usr/bin/python """ Convert JSON data to human-readable form. Usage: prettyJSON.py inputFile [outputFile] """ import sys import simplejson as json def main(args): try: if args[1] == '-': inputFile = sys.stdin else: inputFile = open(args[1]) input = json.load(inputFile) inputFile.close() except IndexError: usage() return False if len(args) < 3: print json.dumps(input, sort_keys = False, indent = 4) else: outputFile = open(args[2], "w") json.dump(input, outputFile, sort_keys = False, indent = 4) outputFile.close() return True def usage(): print __doc__ if __name__ == "__main__": sys.exit(not main(sys.argv)) 
84
10 дек. Atsakymą pateikė AnC 10 Dec. 2008-12-10 01:22 '08 ne 1:22 2008-12-10 01:22

Jei naudojate „npm“ ir „Node.js“, galite atlikti „ npm install -g json ir vykdyti komandą per „ json . Padarykite json -h kad gautumėte visas parinktis. Jis taip pat gali ištraukti tam tikrus laukus ir spalvą su -i .

 curl -s http://search.twitter.com/search.json?q=node.js | json 
69
30 янв. atsakymas pateikiamas isaacs 2011-01-30 03:46 '11 at 3:46 2011-01-30 03:46

* Nix sistemoje skaitymas iš stdin ir rašymas į stdout veikia geriau:

 #!/usr/bin/env python """ Convert JSON data to human-readable form. (Reads from stdin and writes to stdout) """ import sys try: import simplejson as json except: import json print json.dumps(json.loads(sys.stdin.read()), indent=4) sys.exit(0) 

Įdėkite tai į failą (aš vadinavau „prettyJSON“ po „AnC“ atsakymo) jūsų PATH ir chmod +x , ir jūs einate gerai.

67
31 июля '09 в 3:51 2009-07-31 03:51 atsakymą pateikė Daryl Spitzer, liepos 31 d., 09:51, 2009-07-31 03:51

Naudodami „Perl“ naudokite CPAN JSON::XS modulį. Jis įdiegia komandinės eilutės json_xs .

Patvirtinti:

 json_xs -t null < myfile.json 

Pateikite failą JSON src.json faile pretty.json :

 < src.json json_xs > pretty.json 

Jei neturite json_xs , pabandykite json_pp . „pp“ „grynas perl“ - įrankis įgyvendinamas tik „Perl“, nenurodant išorinės C bibliotekos (tai reiškia, „XS“, „Perl“ išplėtimo sistema).

67
30 июня '10 в 17:31 2010-06-30 17:31 atsakyti į suteiktą knb birželio 30 d., 10 val. 17:31 2010-06-30 17:31

JSON Ruby Gem ateina su scenarijaus apvalkalu, kuris apsaugo JSON:

 sudo gem install json echo '{ "foo": "bar" }' | prettify_json.rb 

Scenarijų atsisiuntimas: gist.github.com/3738968

64
29 дек. Horsfall atsakymas 29 d. 2009-12-29 19:36 '10, 19:36, 2009-12-29 19:36

Tai nėra pernelyg paprasta su gimtosios kalbos priemonėmis .

Pavyzdžiui:

 cat xxx | jq . 
61
18 мая '17 в 18:47 2017-05-18 18:47 Atsakymą pateikė Olexandr Minzak gegužės 18 d. 17 val. 18:47

UPDATE Aš naudoju jq dabar, kaip siūloma kitame atsakyme. Tai labai galinga, kai filtruojate JSON, bet pats paprasčiausias būdas - tai ir puikus būdas spausdinti JSON.

jsonpp yra labai gražus JSON komandų eilutė.

Iš README:

Gana spausdinimo atsakymai į žiniatinklio paslaugą, pavyzdžiui:

 curl -s -L http://<!---->t.co/tYTq5Pu | jsonpp 

ir padaryti gražius failus, kurie veikia jūsų diske:

 jsonpp data/long_malformed.json 

Jei esate „Mac OS X“, galite brew install jsonpp . Jei ne, galite paprasčiausiai kopijuoti dvejetainį failą kažkur $PATH .

53
21 мая '13 в 12:18 2013-05-21 12:18 atsakymas pateikiamas „ jordelver“ gegužės 13 d., 12:18, 2013-05-21 12:18

Pabandykite pjson . Jis turi spalvų!

2019

51
29 янв. Johann Philipp Strathausen atsakymas sausio 29 d 2013-01-29 15:23 '13, 15:23, 2013-01-29 15:23
 $ echo '{ "foo": "lorem", "bar": "ipsum" }' \ > | python -c'import fileinput, json; > print(json.dumps(json.loads("".join(fileinput.input())), > sort_keys=True, indent=4))' { "bar": "ipsum", "foo": "lorem" } 

PASTABA. Tai nėra būdas tai padaryti.

Tas pats Perl:

 $ cat json.txt \ > | perl -0007 -MJSON -nE'say to_json(from_json($_, {allow_nonref=>1}), > {pretty=>1})' { "bar" : "ipsum", "foo" : "lorem" } 

2 pastaba: jei paleisite

 echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \ | python -c'import fileinput, json; print(json.dumps(json.loads("".join(fileinput.input())), sort_keys=True, indent=4))' 

gražiai skaitomas žodis tampa koduotu

 { "D\u00fcsseldorf": "lorem", "bar": "ipsum" } 

Jei likusios dujotiekio dalys bus elegantiškai ensure_ascii=False Unicode ir norite, kad JSON būtų patogus žmonėms, naudokite ensure_ascii=False

 echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \ | python -c'import fileinput, json; print json.dumps(json.loads("".join(fileinput.input())), sort_keys=True, indent=4, ensure_ascii=False)' 

ir gausite:

 { "Düsseldorf": "lorem", "bar": "ipsum" } 
41
09 дек. atsakymas pateikiamas 09 d. 2008-12-09 11:52 '08 at 11:52 2008-12-09 11:52

Ką daryti:

 curl yourUri | json_pp 

Jis sutrumpina kodą ir atlieka užduotį.

40
03 февр. Atsakymą pateikė JedatKinports 03 vasaris. 2017-02-03 00:23 '17 - 0:23 2017-02-03 00:23

Aš naudoju jshon daryti tai, ką aprašėte . Tiesiog paleiskite:

 echo $COMPACTED_JSON_TEXT | jshon 

Taip pat galite perduoti argumentus JSON duomenų konvertavimui.

39
20 мая '11 в 2:51 2011-05-20 02:51 atsakymą pateikė „ yardena“ gegužės 20 d., 11 d., 2:51, 2011-05-20 02:51

Arba su Ruby:

 echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets' 
37
21 окт. atsakymas darscan Oct 21 2009-10-21 12:10 '09, 12:10 2009-10-21 12:10

Patikrinkite Jazor . Tai paprastas JSON analizatorius, parašytas Ruby.

 gem install jazor jazor --help 
37
25 янв. Atsakymą pateikė Mike 25 d. 2011-01-25 21:35 '11, 21:35, 2011-01-25 21:35

Tiesiog pateikite produkciją į jq . .

Pavyzdys:

 twurl -H ads-api.twitter.com '.......' | jq . 
29
04 окт. Ackshaey Singh atsakymas 2016-10-04 02:29 '16 at 2:29 am 2016-10-04 02:29

„JSONLint“ turi atviro kodo diegimą „github“, galite jį naudoti komandinėje eilutėje arba į savo projektą įtraukti „node.js“.

 npm install jsonlint -g 

ir tada

 jsonlint -p myfile.json 

arba

 curl -s "http://api.twitter.com/1/users/show/user.json" | jsonlint | less 
28
27 апр. atsakymą pateikė Salman A 27 d. 2012-04-27 13:37 '12 13:37 2012-04-27 13:37

Pygmentize

Python json.tool su pygmentize derinu:

 echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g 

Yra kelios alternatyvos pygmentizacijai, kurios išvardytos mano atsakyme .

Čia yra tiesioginis demonstravimas:

2019

27 авг. Shubham Chaudhary atsakymas, rugpjūčio 27 d. 2015-08-27 13:09 '15, 13:09 val. 2015-08-27 13:09

Vanilla bash

Paprastas „Bash“ scenarijus ( grep / awk ), skirtas gana JSON spausdinimui be trečiosios šalies diegimo:

json_pretty.sh

 #/bin/bash grep -Eo '"[^"]*" *(: *([0-9]*|"[^"]*")[^{}\["]*|,)?|[^"\]\[\}\{]*|\{|\},?|\[|\],?|[0-9 ]*,?' | awk '{if ($0 ~ /^[}\]]/ ) offset-=4; printf "%*c%s\n", offset, " ", $0; if ($0 ~ /^[{\[]/) offset+=4}' 

Pavyzdžiai:

1) Failo skaitymas ir spausdinimas konsolėje

 cat file.json | json_pretty.sh 

2) Naudokite GIT Bash su >
 cat fileIn.json |sh.exe json_pretty.sh > fileOut.json 

20
27 июля '16 в 10:54 2016-07-27 10:54 atsakymą pateikė Jevgenijus Karpovas liepos 16 d. 10:54 2016-07-27 10:54

Aš rekomenduoju naudoti komandinės eilutės įrankį json_xs, kuri yra įtraukta į JSON :: XS perl modulį. JSON :: XS yra „Perl“ modulis JSON serializavimui / deserializavimui, „Debian“ arba „Ubuntu“ įrenginyje, galite jį įdiegti taip:

 sudo apt-get install libjson-xs-perl 

Jis taip pat prieinamas CPAN .

Jei norite jį naudoti formatuodami JSON gautą iš URL, galite naudoti „curl“ arba „wget“:

 $ curl -s http://page.that.serves.json.com/json/ | json_xs 

arba tai:

 $ wget -q -O - http://page.that.serves.json.com/json/ | json_xs 

ir formatuoti JSON, esančią faile, galite tai padaryti:

 $ json_xs < file-full-of.json 

Jei norite performatuoti kaip „ YAML“ , kurį kai kurie žmonės aptinka labiau nei žmogus, nei JSON:

 $ json_xs -t yaml < file-full-of.json 
18
03 февр. atsakymas suteiktas 03 vasario mėn. 2011-02-03 01:06 '11 at 1:06 2011-02-03 01:06

Su Perl, jei įdiegsite JSON :: PP iš CPAN, gausite json_pp . Pavogę Bycroft B pavyzdį , gausite:

 [pdurbin@beamish ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp { "bar" : "ipsum", "foo" : "lorem" } 

Verta pažymėti, kad json_pp ateina su iš anksto įdiegta Ubuntu 12.04 versija (bent jau) ir Debian į /usr/bin/json_pp

18
07 окт. Philip Durbin atsakymas, pateiktas spalio 7 d 2011-10-07 21:27 '11, 21:27, 2011-10-07 21:27
  • brew install jq
  • command + | jq
  • (pavyzdys: curl localhost:5000/blocks | jq )
  • Mėgaukitės!

2019

15 сент. Atsakymas, kurį pateikė Alexanderjsingleton, rugsėjo 15 d 2017-09-15 23:38 '17, 11:38 pm 2017-09-15 23:38

jj veikia labai greitai, gali ekonomiškai apdoroti didžiulius JSON dokumentus, neveikia su realiais JSON numeriais ir yra paprasta naudoti, pavyzdžiui:

 jj -p # for reading from STDIN 

arba

 jj -p -i input.json 

Jis (2018 m.) Vis dar yra gana naujas, todėl galbūt jis netvarkys neteisingo JSON, kaip tikitės, tačiau jį lengva įdiegti pagrindinėse platformose.

12
25 февр. atsakymas pateikiamas piko 25 vasario mėn. 2018-02-25 16:50 '18, 4:50 pm 2018-02-25 16:50

Įdiekite „yajl“ įrankius naudodami toliau nurodytą komandą:

sudo apt-get install yajl-tools

kad

echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat

11
23 нояб. Atsakymas pateikiamas Uma sankar pradhan 23 lapkričio. 2012-11-23 16:30 '12 - 16:30 val. 2012-11-23 16:30

yajl mano patirtimi labai gerai. Aš naudoju komandą json_reformat spausdinti .json failus json_reformat , įterpdamas šią .vimrc :

 autocmd FileType json setlocal equalprg=json_reformat 
10
18 мая '11 в 19:32 2011-05-18 19:32 atsakymas į „ Hank Gay“ pateikiamas gegužės 18 d. 11 val. 19:32 2011-05-18 19:32

PHP versija, jei turite PHP> = 5.4.

 alias prettify_json=php -E '$o = json_decode($argn); print json_encode($o, JSON_PRETTY_PRINT);' echo '{"a":1,"b":2}' | prettify_json 
9
18 апр. atsakymą pateikė svidgen 18 balandžio. 2013-04-18 21:45 '13, 21:45, 2013-04-18 21:45

Aš naudoju „ httpie“

 $ pip install httpie 

Ir jūs galite jį naudoti taip:

  $ http PUT localhost:8001/api/v1/ports/my HTTP/1.1 200 OK Connection: keep-alive Content-Length: 93 Content-Type: application/json Date: Fri, 06 Mar 2015 02:46:41 GMT Server: nginx/1.4.6 (Ubuntu) X-Powered-By: HHVM/3.5.1 { "data": [], "message": "Failed to manage ports in 'my'. Request body is empty", "success": false } 
8
06 марта '15 в 5:48 2015-03-06 05:48 slashmili atsakymas kovo 06 d. 15 val. 5:48 2015-03-06 05:48
  • 1
  • 2