JSON'u bir kabuk beti─činde nas─▒l g├╝zel basabilirim?


Al─▒nan cevaba git


JSON'u insan taraf─▒ndan okunabilir bi├žimde formatlamak i├žin bir (Unix) kabuk beti─či var m─▒?

Temel olarak, a┼ča─č─▒dakileri d├Ân├╝┼čt├╝rmesini istiyorum:

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

... bunun gibi bir ┼čeye:

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

2871









Cevap say─▒s─▒n─▒ say: 30






Python 2.6+ ile yapabilecekleriniz:

 echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool
 

veya, JSON bir dosyadaysa, ┼čunlar─▒ yapabilirsiniz:

 python -m json.tool my_json.json
 

JSON, API gibi bir internet kayna─č─▒ndan geliyorsa,

 curl http://my_url/ | python -m json.tool
 

T├╝m bu durumlarda kolayl─▒k sa─člamak i├žin bir takma ad yapabilirsiniz:

 alias prettyjson='python -m json.tool'
 

Haz─▒rlamak i├žin biraz daha fazla yazarak daha fazla rahatl─▒k i├žin:

 prettyjson_s() {
    echo "$1" | python -m json.tool
}

prettyjson_f() {
    python -m json.tool "$1"
}

prettyjson_w() {
    curl "$1" | python -m json.tool
}
 

Yukar─▒daki t├╝m durumlar i├žin. Bunu i├žine koyabilirsin .bashrc ve her seferinde kabu─čuna ula┼čabilirsin. ├ľyle ├ža─č─▒r prettyjson_s '{"foo": "lorem", "bar": "ipsum"}' .


4244







Kullanabilirsiniz: jq

Kullan─▒m─▒ ├žok basit ve harika ├žal─▒┼č─▒yor! Ak─▒┼člar dahil ├žok b├╝y├╝k JSON yap─▒lar─▒n─▒ idare edebilir. E─čitimlerini burada bulabilirsiniz .

─░┼čte bir ├Ârnek:

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

Veya ba┼čka bir deyi┼čle:

 $ echo '{ "foo": "lorem", "bar": "ipsum" }' | jq .
{
  "bar": "ipsum",
  "foo": "lorem"
}
 

882







JSON.stringify JSON'u JavaScript'te yazd─▒rmak i├žin "space" arg├╝man─▒n─▒ kullan─▒yorum .

├ľrnekler:

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

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

Node.js ile Unix komut sat─▒r─▒ndan, komut sat─▒r─▒nda JSON belirterek:

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

─░ade:

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

Node.js i├žeren Unix komut sat─▒r─▒ndan JSON i├žeren bir dosya ad─▒ belirlemek ve d├Ârt bo┼čluk girinti kullanarak:

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

Bir boru kullanarak:

 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));\
 });\
"
 

372







Kullan─▒labilir en iyi "ak─▒ll─▒ bo┼čluk" bi├žemlerinden birine sahip bir ara├ž yazd─▒m. Buradaki di─čer se├ženeklerin ├žo─čundan daha okunakl─▒ ve daha az ayr─▒nt─▒l─▒ ├ž─▒kt─▒ ├╝retir.

├žizgi-cli

Bu "ak─▒ll─▒ bo┼čluk" gibi g├Âr├╝n├╝yor:




Biraz ├Ânyarg─▒l─▒ olabilirim, ancak JSON verilerini komut sat─▒r─▒ndan yazd─▒rmak ve de─či┼čtirmek i├žin harika bir ara├žt─▒r. Kullan─▒m─▒ kolayd─▒r ve geni┼č komut sat─▒r─▒ yard─▒m─▒na / belgelerine sahiptir. Bu, 1001 farkl─▒ k├╝├ž├╝k g├Ârev i├žin kulland─▒─č─▒m ve ┼ča┼č─▒rt─▒c─▒ bir ┼čekilde ba┼čka bir ┼čekilde rahats─▒z edici olabilecek bir ─░svi├žre Ordusu b─▒├ža─č─▒.

Son kullan─▒m durumu: Chrome, Dev konsolu, A─č sekmesi, t├╝m├╝n├╝ HAR dosyas─▒ olarak d─▒┼ča aktar, "cat site.har | underscore select '.url' - outfmt text | grep mydomain"; ┼čimdi ┼čirket sitemin y├╝klenmesi s─▒ras─▒nda yap─▒lan t├╝m URL al─▒mlar─▒n─▒n kronolojik olarak s─▒ralanm─▒┼č bir listesine sahibim.

G├╝zel bask─▒ kolayd─▒r:

 underscore -i data.json print
 

Ayn─▒ ┼čey:

 cat data.json | underscore print
 

Ayn─▒ ┼čey, daha a├ž─▒k:

 cat data.json | underscore print --outfmt pretty
 

Bu ara├ž benim ┼ču anki tutku projem, bu y├╝zden herhangi bir ├Âzellik iste─činiz varsa, onlara hitap edebilece─čim iyi bir ┼čans var.


334







Genelde sadece yapar─▒m:

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

Ve se├žme verilerini almak i├žin (bu durumda, "test" 'in de─čerini):

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

JSON verileri bir dosyadaysa:

 python -mjson.tool filename.json
 

Hepsini bir arada yapmak istiyorsan─▒z, curl bir kimlik do─črulama belirteci kullanarak komut sat─▒r─▒na gidin :

 curl -X GET -H "Authorization: Token wef4fwef54te4t5teerdfgghrtgdg53" http://testsite/api/ | python -mjson.tool
 

172







JF Sebastian'─▒n ├žok yard─▒mc─▒ i┼čaret├žileri sayesinde, ┼ču ana kadar geldi─čim biraz geli┼čmi┼č bir senaryo:

 #!/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))
 

86







JQ ara├žlar─▒ ile yerel bir ┼čekilde ├žok basit de─čil .

├ľrne─čin:

 cat xxx | jq .
 

76







Npm ve Node.js kullan─▒yorsan─▒z npm install -g json , komutu uygulayabilir ve sonra iletebilirsiniz json . Do json -h t├╝m se├ženekleri al─▒r. Ayr─▒ca belirli alanlar─▒ ├ž─▒karabilir ve ├ž─▒kt─▒y─▒ renklendirebilir -i .

 curl -s http://search.twitter.com/search.json?q=node.js | json
 

74







Perl ile CPAN mod├╝l├╝n├╝ kullan─▒n JSON::XS . Bir komut sat─▒r─▒ arac─▒ y├╝kler json_xs .

Do─črulama:

 json_xs -t null < myfile.json
 

JSON dosyas─▒n─▒ src.json a┼ča─č─▒daki gibi haz─▒rlay─▒n pretty.json :

 < src.json json_xs > pretty.json
 

E─čer yoksa json_xs , dene json_pp . "pp" "saf perl" i├žindir - ara├ž yaln─▒zca bir Perl'de, harici bir C k├╝t├╝phanesine ba─članmadan uygulan─▒r (XS, Perl'in "Uzant─▒ Sistemi" anlam─▒na gelir).


69







On * nix, stdin'den okumak ve stdout'a yazmak daha iyi ├žal─▒┼č─▒r:

 #!/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)
 

Bunu bir dosyaya koyun (AnC'nin cevab─▒ndan sonra benim "prettyJSON" olarak adland─▒rd─▒m ) PATH'nizde ve chmod +x onu se├žin ve gitmeniz iyi olur.


69







JSON Ruby Gem, JSONÔÇÖu g├╝zelle┼čtirmek i├žin bir kabuk beti─či ile paketlenmi┼čtir:

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

Betik indir: gist.github.com/3738968


65







G├ťNCELLEME jq ┼×imdi ba┼čka bir cevapta ├Ânerildi─či gibi kullan─▒yorum . JSON'u filtrelemede son derece g├╝├žl├╝d├╝r, ancak en temelde, g├Âr├╝nt├╝leme i├žin g├╝zel bir ┼čekilde JSON yazd─▒rman─▒n harika bir yoludur.

jsonpp JSON g├╝zel bir yaz─▒c─▒ ├žok g├╝zel bir komut sat─▒r─▒d─▒r.

README'den:

Olduk├ža yazd─▒r─▒lan web hizmeti yan─▒tlar─▒ ┼č├Âyle:

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

ve diskinizde ├žal─▒┼čan dosyalar─▒ g├╝zelle┼čtirmek:

 jsonpp data/long_malformed.json
 

Mac OS XÔÇÖdeyseniz, yapabilirsiniz brew install jsonpp . De─čilse, sadece binary'i i├žinde bulunan bir yere kopyalayabilirsiniz $PATH .


56







Dene pjson . Renkleri var!


echo '{&quot;json&quot;: &quot;obj&quot;} | pjson

┼×ununla y├╝kleyin pip :

ÔÜí pip install pjson

Ve sonra herhangi bir JSON i├žeri─čini y├Ânlendirmek pjson .


52







Ben b├Âyle yap─▒yorum:

 curl yourUri | json_pp
 

Kodu k─▒salt─▒r ve i┼čin yap─▒lmas─▒n─▒ sa─člar.


52







g├╝zel json bask─▒ i├žin basit bir bash beti─či

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}'
 

├ľrnek:

 cat file.json | json_pretty.sh
 

49







 $ 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"
}
 

NOT: de─čil bunu yapman─▒n yolu.

Perl de ayn─▒:

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

Not 2: E─čer ko┼čarsan─▒z

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

g├╝zel okunabilir kelime kodlanm─▒┼č olur

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

Senin boru hatt─▒n─▒n kalan incelikle unicode idare edecek ve ayn─▒ zamanda insan dostu, basit├že olmak size JSON isterseniz kullan─▒m─▒ 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)'
 

ve alacaks─▒n:

 {
    "D├╝sseldorf": "lorem", 
    "bar": "ipsum"
}
 

43







Tan─▒mlad─▒─č─▒n─▒z ┼čeyi yapmak i├žin jshon kullan─▒yorum . Sadece ko┼č:

 echo $COMPACTED_JSON_TEXT | jshon
 

JSON verisini d├Ân├╝┼čt├╝rmek i├žin arg├╝manlar─▒ da iletebilirsiniz.


39







Veya, Ruby ile:

 echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'
 

38







Jazor'u kontrol et . Ruby'de yaz─▒lm─▒┼č basit bir komut sat─▒r─▒ JSON ayr─▒┼čt─▒r─▒c─▒s─▒.

 gem install jazor
jazor --help
 

36







JSONLint , GitHub'da komut sat─▒r─▒nda kullan─▒labilecek veya bir Node.js projesinde yer alabilen a├ž─▒k kaynakl─▒ bir uygulamaya sahiptir .

 npm install jsonlint -g
 

ve sonra

 jsonlint -p myfile.json
 

veya

 curl -s "http://api.twitter.com/1/users/show/user.json" | jsonlint | less
 

31







Sonucu elde etmek i├žin bu basit komutu kullanabilirsiniz:

 echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool
 

31







├ç─▒kt─▒y─▒ k─▒saca y├Ânlendirin jq . .

├ľrnek:

 twurl -H ads-api.twitter.com '.......' | jq .
 

29







Pygmentize

Python'un json.tool komutunu pygmentize ile birle┼čtiriyorum:

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

Bu cevab─▒mda listelenen pygmentize i├žin baz─▒ alternatifler var .

─░┼čte canl─▒ bir demo:


g├Âsteri


24







Perl ile CPAN'dan JSON :: PP kurarsan─▒z json_pp komutunu al─▒rs─▒n─▒z . H─▒rs─▒zl─▒k ├Ârnek dan B Bycroft elde edersiniz:

 [[email protected] ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
   "bar" : "ipsum",
   "foo" : "lorem"
}
 

json_pp Ubuntu 12.04 (en az─▒ndan) ve DebianÔÇÖda ├Ânceden y├╝klenmi┼č olarak geldi─čini s├Âylemeye de─čer . /usr/bin/json_pp


20







JSON :: XS perl mod├╝l├╝nde bulunan json_xs komut sat─▒r─▒ yard─▒mc─▒ program─▒n─▒ kullanman─▒z─▒ ├Âneririm. JSON :: XS, JSON'u seri hale getirmek / seri hale getirmek i├žin kullan─▒lan bir Perl mod├╝l├╝d├╝r, Debian veya Ubuntu makinelerinde bu ┼čekilde y├╝kleyebilirsiniz:

 sudo apt-get install libjson-xs-perl
 

Belli ki CPAN'da da mevcut .

Bir URLÔÇÖden elde edilen JSONÔÇÖu bi├žimlendirmek i├žin kullanmak i├žin curl veya wget gibi kullanabilirsiniz:

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

veya bu:

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

ve bir dosyada bulunan JSON'u formatlamak i├žin ┼čunu yapabilirsiniz:

 $ json_xs < file-full-of.json
 

Baz─▒ insanlar─▒n JSON'dan daha insanca okunabilir oldu─čunu d├╝┼č├╝nd├╝─č├╝ YAML olarak yeniden bi├žimlendirmek i├žin :

 $ json_xs -t yaml < file-full-of.json
 

19







  1. brew install jq
  2. command + | jq
  3. (├Ârnek: curl localhost:5000/blocks | jq )
  4. Keyfini ├ž─▒kar─▒n!


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


16







jj s├╝per h─▒zl─▒d─▒r, devasa JSON belgelerini ekonomik olarak idare edebilir, ge├žerli JSON numaralar─▒yla u─čra┼čmaz ve kullan─▒m─▒ kolayd─▒r;

 jj -p # for reading from STDIN
 

veya

 jj -p -i input.json
 

(2018) hala olduk├ža yeni, bu nedenle belki de ge├žersiz JSON'u bekledi─činiz ┼čekilde kullanmayacak, ancak b├╝y├╝k platformlarda kurulumu kolay.


16







bat cat s├Âzdizimini vurgulayan bir klondur:

├ľrnek:

 echo '{"bignum":1e1000}' | bat -p -l json
 

-p ba┼čl─▒klar olmadan -l ├ž─▒kacak ve dili a├ž─▒k├ža belirtecektir.

JSON i├žin renklendirme ve bi├žimlendirme var ve bu yorumda belirtilen sorunlara sahip de─čil : JSON'u bir kabuk beti─činde nas─▒l g├╝zel basabilirim?


14







Yajl-tools program─▒n─▒ a┼ča─č─▒daki komutla y├╝kleyin:

sudo apt-get install yajl-tools

sonra,

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


12







yajl benim tecr├╝belerime g├Âre ├žok g├╝zel. A┼ča─č─▒daki sat─▒r─▒ benim sat─▒r─▒na koyarak dosyalar─▒ json_reformat g├╝zel bir ┼čekilde yazd─▒rmak i├žin komutunu kullan─▒yorum : .json vim .vimrc

 autocmd FileType json setlocal equalprg=json_reformat
 

10