ෂෙල් ස්ක්‍රිප්ට් එකක JSON ලස්සනට මුද්‍රණය කරන්නේ කෙසේද?


3072

මිනිසුන්ට කියවිය හැකි ආකාරයෙන් JSON සංයුති කිරීමට (යුනික්ස්) ෂෙල් පිටපතක් තිබේද?

මූලික වශයෙන්, එය පහත සඳහන් දේ පරිවර්තනය කිරීමට මට අවශ්‍යය:

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

... මේ වගේ දෙයකට:

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


7
මඳ වේලාවකට පසු මම මගේම දෑතින් පෙරළා ගතිමි : github.com/exhuma/braindump/tree/master/jsonformat කේතය ඉතා සරලයි, jsonපයිතන්ගේම පුස්තකාලයක් භාවිතා කරමින් , නමුත් මම සින්ටැක්ස් ඉස්මතු කිරීම සඳහා වර්ණක එකතු කළෙමි.
exhuma

මේ සඳහා පැකිලී ගිය නමුත් පසුව ජේසන් ප්‍රෙට්ටි හමු වූ අතර මම එයට කැමතියි. ටයිප්කිට් එය ඔවුන්ගේ API උදාහරණ වල භාවිතා කරයි, එබැවින් එහි පිටුපස යම් ක්ලවුට් එකක් ඇත
නික් ටොම්ලින්

පේස්ට් පිටපත් කිරීම ඔබට ප්‍රශ්නයක් නොවේ නම්, jsonprettyprint.net වැනි සරල මෙවලම් කිහිපයක්ද ඇත, එහිදී ඔබට ඔබේ අමු JSON ඉක්මනින් මුද්‍රණය කළ හැකිය.
ජාවාආ

7
අවවාද කරන්න: python -m json.tool සෑම විටම වලංගු JSON නිපදවන්නේ නැත. (ඉඟිය: 1e1000)
උපරිම

Answers:


4471

පයිතන් 2.6+ සමඟ ඔබට කළ හැක්කේ:

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

හෝ, JSON ගොනුවක තිබේ නම්, ඔබට මෙය කළ හැකිය:

python -m json.tool my_json.json

JSON API වැනි අන්තර්ජාල ප්‍රභවයකින් නම්, ඔබට භාවිතා කළ හැකිය

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

මෙම සියලු අවස්ථාවන්හි පහසුව සඳහා ඔබට අන්වර්ථයක් සෑදිය හැකිය:

alias prettyjson='python -m json.tool'

එය සූදානම් කිරීම සඳහා තව ටිකක් ටයිප් කිරීම සමඟ වඩාත් පහසුව සඳහා:

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

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

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

ඉහත සියළු අවස්ථා සඳහා. ඔබට මෙය දැමිය හැකි .bashrcඅතර එය සෑම විටම කවචයෙන් ලබා ගත හැකිය. ඒ වගේ ආයාචනා කරන්න prettyjson_s '{"foo": "lorem", "bar": "ipsum"}'.


73
pygmentize -l javascriptඔබේ විධාන රේඛාවේ සින්ටැක්ස් වර්ණ ප්‍රතිදානය ලබා ගැනීම සඳහා ඔබට එය නල කළ හැකිය . සංස්කරණය කරන්න : ඔබ විසින් වර්ණක ස්ථාපනය කර ඇත්නම් එය.
ශ්‍රීකාන්ත් ෂරත්

177
විශාල පිළිතුර පමණක් මම එය සමඟ ඇති අවවාදය එය කරන්නේ ඔබ දැනුවත් විය යුතු විය කරන - ආකාරයක ප්රතිදානය මත යතුරු.
ක්‍රිස් නැෂ්

14
මගේ .vimrc "nnoremap <f5>:%! Python -m json.tool <CR>: w <CR>"
imwilsonxu

40
මෙය යුනිකෝඩ් අක්ෂර \ uXXXX වෙතට ගැලවීම පෙනේ, එය අවාසියක් විය හැකිය.
user1071136

14
මම අන්වර්ථයක් නිර්මාණය කර ඇත්තෙමි: alias pretty='python -mjson.tool | pygmentize -l jsonඑවිට මට ධාවනය කළ හැකිය : command params | pretty. මෙය උපකාරී වේ යැයි සිතමි. PS: යමෙකු මෙය දීර් to කිරීමට කළමනාකරණය කළ යුතුද? අ) සෑම විටම මා දකින කරකැවෙන ප්‍රතිදානය ඉවත් කරන්න සහ / හෝ ආ) json යතුරු වර්ග නොකරන්න; කරුණාකර මට දන්වන්න, මම බෙහෙවින් ස්තූතිවන්ත වෙමි.
ක්ලින්ට් ඊස්ට්වුඩ්

1031

ඔයාට පාවිච්චි කරන්න පුළුවන්: jq

එය භාවිතා කිරීම ඉතා සරල වන අතර එය විශිෂ්ට ලෙස ක්‍රියා කරයි! එයට ධාරා ඇතුළු ඉතා විශාල JSON ව්‍යුහයන් හැසිරවිය හැකිය. ඔබට ඔවුන්ගේ නිබන්ධන මෙතැනින් සොයාගත හැකිය .

භාවිත උදාහරණ:

$ jq --color-output . file1.json file1.json | less -R

$ command_with_json_output | jq .

$ jq . # stdin/"interactive" mode, just enter some JSON

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

එම . අනන්‍යතා පෙරණය වේ.


11
--sort-keysවිකල්පයක් ද ඇත , එය සමහර අවස්ථාවල උපකාරී වේ.
මැතිව් ෆ්ලැෂෙන්

9
කරකැවිල්ල සමඟ වැඩ කිරීම:curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
හොවාන් රුවන්

19
"jq." ලස්සන මුද්‍රණ යන්ත්‍රයක් ලෙස විශිෂ්ටයි, නමුත් එය අවවාදයක් සමඟ පැමිණේ: jq (jq අනුවාදය 1.5 දක්වා සහ ඇතුළුව) ඉතා විශාල හා ඉතා කුඩා සංඛ්‍යා වල අගයන් වෙනස් කරයි, මන්ද එය සංඛ්‍යාත්මක අගයන් IEEE 754 64-bit අගයන් ලෙස විග්‍රහ කරයි. ඔබගේ ප්‍රියතම ලස්සන මුද්‍රණ යන්ත්‍රයට එකම ගැටලුවක් තිබේදැයි පරීක්ෂා කිරීමට, මෙම අගය උත්සාහ කරන්න: 1e1000. බව සටහන පිඹුරා -mjson.tool දරුණු ලෙස මෙම පරීක්ෂණය අසමත්වුවහොත් එය පවා JSON නොවන තරම් දුරකට, නිෂ්පාදනය කරන දී.
උපරිම

1
සටහනක් ලෙස, ඔබට ආකෘතිගත කළ ප්‍රති result ලය ගොනුවකට හරවා යැවිය හැකිය : echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . > myfile.
චැඩ්

26
Ee මීකෝහි විකල්පය වන්නේ "අනවශ්‍ය ලෙස ප්‍රතිරාවය භාවිතා කිරීමයි". <<<ක්‍රියාකරු සොයා ගැනීම ගැන සතුටුයි - මම සොයන දේ හරියටම.
jchook

381

මම JSON.stringifyජාවාස්ක්‍රිප්ට් හි JSON ලස්සන ලෙස මුද්‍රණය කිරීමට “අවකාශය” තර්කය භාවිතා කරමි .

උදාහරණ:

// 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 සමඟ යුනික්ස් විධාන රේඛාවෙන්, විධාන රේඛාවේ JSON සඳහන් කරන්න:

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

ප්‍රතිලාභ:

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

Node.js සමඟ යුනික්ස් විධාන රේඛාවෙන්, JSON අඩංගු ගොනු නාමයක් සඳහන් කිරීම සහ අවකාශ හතරක ඉන්ඩෙන්ට් එකක් භාවිතා කිරීම:

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

පයිප්පයක් භාවිතා කිරීම:

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

10
Node.js හි ඇති වස්තු නිදොස් කිරීම සඳහා, ඔබ සැබවින්ම JSON.stringify () වෙනුවට sys.inspect () භාවිතා කළ යුතුය. මෙන්න හේතුව: markhansen.co.nz/inspecting-with-json-stringify
සිං

11
පහත් කොට ඇත. OP යනු "* nix විධාන රේඛා ස්ක්‍රිප්ට්" එකක් වන අතර මෙම පිළිතුර වෙනස් සන්දර්භයකි.
danorton

49
andanorton: JS විධාන රේඛාවෙන් node.js සහ වෙනත් සමාන විසඳුම් හරහා භාවිතා කළ හැකිය.
calvinf

10
කොන්සෝලය අවශ්‍ය නොවේ: node -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"ප්‍රති ST ලය STDOUT වෙත ප්‍රතිදානය කරයි.
ජූලියන් ඩී.

2
එදිරිව stdin
Lukasz Wiktor

340

මම හොඳම "ස්මාර්ට් වයිට්ස්පේස්" ආකෘති ලබා ගත හැකි මෙවලමක් ලිවීය. මෙහි ඇති අනෙකුත් විකල්ප බොහොමයකට වඩා එය කියවිය හැකි සහ අඩු වාචික ප්‍රතිදානයක් නිපදවයි.

underscore-cli

"ස්මාර්ට් වයිට්ස්පේස්" පෙනුම මෙයයි:

මම ටිකක් පක්ෂග්‍රාහී විය හැකි නමුත් එය විධාන රේඛාවෙන් JSON දත්ත මුද්‍රණය කිරීම හා හැසිරවීම සඳහා විශිෂ්ට මෙවලමකි. එය භාවිතා කිරීමට සුපිරි හිතකාමී වන අතර පුළුල් විධාන රේඛා උදව් / ලියකියවිලි ඇත. එය ස්විට්සර්ලන්ත හමුදා පිහියක් වන අතර මම විවිධ කුඩා කාර්යයන් 1001 ක් සඳහා භාවිතා කරමි. එය වෙනත් ක්‍රමයක් කිරීමට පුදුම සහගතය.

නවතම භාවිත අවස්ථාව: ක්‍රෝම්, ඩිව් කොන්සෝලය, ජාල පටිත්ත, සියල්ල HAR ගොනුවක් ලෙස අපනයනය කරන්න, "cat site.har | අවධාරනය කරන්න '.url' --outfmt පෙළ | grep mydomain"; දැන් මගේ සමාගමේ වෙබ් අඩවිය පූරණය කිරීමේදී සාදන ලද සියලුම URL ලබාගැනීම් වල කාලානුක්‍රමිකව ඇණවුම් කළ ලැයිස්තුවක් මා සතුව ඇත.

තරමක් මුද්‍රණය කිරීම පහසුය:

underscore -i data.json print

එකම දෙය:

cat data.json | underscore print

එකම දෙය, වඩාත් පැහැදිලි:

cat data.json | underscore print --outfmt pretty

මෙම මෙවලම මගේ වර්තමාන පැෂන් ප්‍රොජෙක්ට් වේ, එබැවින් ඔබට කිසියම් විශේෂාංග ඉල්ලීමක් ඇත්නම්, මම ඒවා ආමන්ත්‍රණය කිරීමට හොඳ අවස්ථාවක් තිබේ.


4
පහත දැක්වෙන රේඛාව ලබා ගැනීම සඳහා මම මගේ ~ / .bash_profile යාවත්කාලීන කළෙමි: අන්වර්ථය underscor = 'underscore print --outfmt beautiful' දැන් මට කරකවන්න පුළුවන් example.com/result.json | අවධාරනය කර වෙනත් හැඩතල ගැන්වීම් සඳහා තවමත් අවධාරනය කරන්න
Gal Bracha

ස්තූතියි ඩේව්! මෙවලම හොඳයි! අන්වර්ථය ලස්සන- json = "යටින් ලස්සනයි" සහ ඇසට ප්‍රසන්න ප්‍රතිදානය
මැක්සිම් පොනෝමරෙව්

විශිෂ්ට හැඩතල ගැන්වීමේ මෙවලම, එක් සටහනක් පමණි: ගොනුවකට ප්‍රතිදානය යොමු කිරීම ( -o විකල්පය සමඟ හෝ > සමඟ ) ක්‍රියාත්මක වන්නේ අවධාරනය කරන්නේ මුද්‍රිත මුද්‍රණයෙන් පමණි . underscore ලස්සන : වර්ණ සමග ගොනු, ඇතුළු වෙමින් ලකුණු හැඩතල, වැනි smth ඉතිරි [32m, [33m, [39mJSON වලංගු නොවේ වීමයි ඔවුන් එක් එක් පෙර-මුද්රිත නොවන සමහර සමග. කෙසේ වෙතත්, අවධාරනය කරන්නේ මුද්‍රණයෙන් පමණක් ගොනුවකට කිසිවක් එකතු නොවන අතර එහි හැඩතල ගැන්වීමේ කාර්යය මනාව ඉටු කරයි.
tiurin

මම ආදරෙයි jqනමුත් ද්විත්ව උපුටා ගත් යතුරු නොමැති මගේ "JSON" සඳහා මෙය බෙහෙවින් ඉවහල් විය.
බ්ලූ

ToveDaveDopson විශිෂ්ට මෙවලමට ස්තූතියි !! එය jsonselect.org/#tryit සමඟ භාවිතා කිරීමට උත්සාහ කරයි ...
mycargus

173

මම සාමාන්‍යයෙන් කරන්නේ:

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

තෝරාගත් දත්ත ලබා ගැනීම සඳහා (මේ අවස්ථාවේ දී, "පරීක්ෂණය" හි වටිනාකම):

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

JSON දත්ත ගොනුවක තිබේ නම්:

python -mjson.tool filename.json

curlසත්‍යාපන ටෝකනයක් භාවිතා කරමින් විධාන රේඛාව සමඟ එකවරම ඔබට එය කිරීමට අවශ්‍ය නම් :

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

මෙම json සෘජුවම පැමිණ කිරීමට නියමිත ව තිබේ නම් froma http api ද මෙම පිඹුරා ක්රියාත්මක ලස්සන මෙවලමකි: github.com/jkbr/httpie
ෆ්ලෝරීන්

ඔබ නෝඩ් ස්ථාපනය කර ඇත්නම් (සහ YAML විලාසිතාවේ නිමැවුමට කමක් නැත) මෙම පැකේජය ද ඇත: rafeca.com/prettyjson එවිට ඔබට කරකැවිල්ල අවසන් කළ හැකිය | prettyjson
අයෝලෝ

3
ඉහත සඳහන් කළ පරිදි, JSON ලස්සන මුද්‍රණ යන්ත්‍රයක් ලෙස python -mjson.tool හි ඇති එක් ගැටළුවක් නම් එය සැමවිටම JSON විමෝචනය නොකිරීමයි. උදා 1e1000 අනන්තය බවට පත්වේ (පයිතන් 2.x හෝ 3.x භාවිතා කළත්). 'jq.' සෑම විටම JSON නිෂ්පාදනය කරයි, නමුත් ඉතා විශාල (හෝ ඉතා කුඩා අගයන්) හරියටම සංරක්ෂණය කර ඇති බවට එය සහතික නොවේ.
උපරිම

88

ජේ. එෆ්. සෙබස්තියන්ගේ ඉතා ප්‍රයෝජනවත් කරුණු වලට ස්තූතියි, මා විසින් ඉදිරිපත් කරන ලද තරමක් වැඩිදියුණු කළ පිටපතක් මෙන්න:

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

3
අගයන් ශබ්ද කෝෂයට පටවන විට, අනුපිළිවෙල නැති වී යයි: සාමාන්‍ය dictවස්තූන්ට නිශ්චිත අනුපිළිවෙලක් නොමැත. උත්සාහ කරන්න json.dumps(json.loads('{"b": 1, "a": 2}'), sort_keys=False), කෙසේ හෝ ඒවා හුවමාරු වී ඇති බව ඔබට පෙනෙනු ඇත. එය නිවැරදි කිරීම සඳහා, ආනයනය කිරීම OrderedDictසහ loadසම්මත කිරීම object_pairs_hook=OrderedDict.
icktoofay

මේ සමඟ සම්මත ආදානයෙන් කියවීමට ඔබට ස්ක්‍රිප්ට් වෙනස් කළ හැකිය : inputFile = sys.stdin. මෙය ඔබට ස්ක්‍රිප්ටයට දේවල් නල කිරීමට ඉඩ දෙයි:curl http://somewhere.com/foo.json | pp_json.py
ගේබ් ජොන්සන්

1
@ Icktoofay ගේ ප්‍රකාශය සමඟ වර්ග කිරීම වළක්වා ගැනීම සඳහා, OrdersDict ආයාත කරන්න : from collections import OrderedDict.
හියුගෝ

2
ස්තූතියි @icktoofay. පහත දැක්වෙන විචක්ෂණ ශ්‍රිතය නිර්මාණය කිරීමට මෙය මට ඉඩ ලබා දුන්නේය com! FormatJSON %!python -c "from collections import OrderedDict; import sys; import json; j = json.load(sys.stdin, object_pairs_hook=OrderedDict); json.dump(j, sys.stdout, sort_keys=False, indent=4, separators=(',', ': '))" : සුදු අවකාශය
අන්ධ ස්නෝ මොබයිල්

නියම ස්නිපටයක්! මම ඒ sort_keys = Trueවෙනුවට භාවිතා කර ඇත්තෙමි , මන්ද මට මෙය json ගොනු සංසන්දනය කිරීමට භාවිතා කිරීමට අවශ්‍ය වන අතර එය චාම් එකක් මෙන් ක්‍රියා කරයි.
ජේ.එල්. පයිරෙට්

81

ඔබ npm හා Node.js භාවිතා කරන්නේ නම්, ඔබට කළ හැකි npm install -g jsonහරහා අණ හා පසුව නල json. කරන්න json -hසියලු විකල්ප ලබා ගැනීමට. එමඟින් විශේෂිත ක්ෂේත්‍ර ඉවත් කර ප්‍රතිදානය වර්ණ ගැන්විය හැකිය -i.

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

79

Jq මෙවලම් සමඟ ස්වදේශීය ආකාරයකින් එය එතරම් සරල නැත .

උදාහරණයක් වශයෙන්:

cat xxx | jq .

7
අවවාදයයි: jq අංක IEEE 754 64-bit පාවෙන ලෙස සංකේතවත් කරයි, එබැවින් ඒවායේ නිරූපණය වෙනස් වීමට ඉඩ ඇත. ඉතා කුඩා හා ඉතා විශාල සංඛ්‍යාවක නිරවද්‍යතාවය නැති වීමට ඉඩ ඇත. ඔබගේ ප්‍රියතම ලස්සන මුද්‍රණ යන්ත්‍රයට එකම ගැටලුවක් තිබේදැයි පරීක්ෂා කිරීමට, මෙම අගය උත්සාහ කරන්න: 1e1000.
උපරිම

5
හෝ සරලව : jq . file.json; නමුත් cat file.json | jq(මෙම පෙරහන තොරව .) ද ක්රියා කරයි. (උබුන්ටු / linux මත, වේදිකා පුරා ymmv)
මයිකල්

73

පර්ල් සමඟ, CPAN මොඩියුලය භාවිතා කරන්න JSON::XS. එය විධාන රේඛා මෙවලමක් ස්ථාපනය කරයි json_xs.

වලංගු කරන්න:

json_xs -t null < myfile.json

JSON ගොනුව පහතට src.jsonයොමු කරන්න pretty.json:

< src.json json_xs > pretty.json

ඔබට නොමැති නම් json_xs, උත්සාහ කරන්න json_pp. "pp" යනු "පිරිසිදු පර්ල්" සඳහා ය - මෙවලම ක්‍රියාත්මක වන්නේ බාහිර C පුස්තකාලයකට බැඳීමකින් තොරව පර්ල්හි පමණි (XS යන්නෙන් අදහස් කරන්නේ පර්ල්ගේ "ව්‍යාප්ති පද්ධතිය").


9
සිග්වින් සමඟ සම්මතයක් ඇති බව පෙනේ!
ජැනස් ට්‍රොල්සන්

13
json_pp එකම ආකාරයකින් භාවිතා කළ හැකි අතර එය බොහෝ විට ඔබේ පද්ධතියේ පහසුවෙන් ස්ථාපනය කර ඇත (ඩේබියන් භාෂාවෙන් එය 'පර්ල්' පැකේජයේ ඇත).
මිචියෙල් බී

8
FYI, මගේ මැක් ඕඑස් එක්ස් 10.9 පද්ධතියේ, json_pp ස්වයංක්‍රීයව ලබා ගත හැකිය.
ග්‍රෙග් විලියම්ස්

-t nullමට ශුන්‍යයි: වලංගු ආකෘතියක් නොවේ ... නමුත් එය අතහැර දැමීම විශිෂ්ට ලෙස ක්‍රියාත්මක විය. ස්තූතියි.
ලූකස්

pp යනු පිරිසිදු පර්ල් සඳහා වන අතර මෙහි මුද්‍රණය නොකෙරේ :) json_xs සහ json_pp හට ලස්සන මුද්‍රණයට වඩා වැඩි යමක් කළ හැකි අතර -json_opt සමඟ ලස්සන මුද්‍රණය වෙනුවට වෙනත් දේ කරන්න. ලස්සන මුද්‍රණය සුපුරුදු හැසිරීම වුවද.
Kjetil S.

70

* නික්ස් හි, stdin සිට කියවීම සහ stdout දක්වා ලිවීම වඩා හොඳය:

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

(මම පසුව "prettyJSON" මගේ නම් ගොනුව මෙම දාන්න ANC හි පිළිතුර) ඔබගේ PATH සහ chmod +xඑය, ඔබ යන්න ඉන්නේ හොඳ.


ඇත්ත වශයෙන්ම, stdin / stdout භාවිතා කිරීම වඩාත් නම්‍යශීලී හා සරල ය. එය පෙන්වා දීමට ස්තූතියි.
AnC

3
නම් කරන ලද ගොනුවක් අපේක්ෂා කරන වැඩසටහන් සඳහා, / dev / stdin, ditto for out and err භාවිතා කරන්න.
dvogel

4
fileinput.input()විධාන රේඛාවක ලිපිගොනු නොමැති නම් FYI stdin වෙතින් කියවයි. උදාහරණය
jfs

fileinput.input () අවසන් වරට නව රේඛාවක් නොමැති ලිපිගොනු සමඟ හොඳින් කටයුතු කළ නොහැක.
සැකරි වැන්ස්

ඔහු අසන්නේ ෂෙල් අක්ෂරයෙන් මිස වෙනත් භාෂාවෙන් පයිතන් නොවේ. JQ සමඟ එය පරිපූර්ණව කළ හැකිය.
බුයි අන් ටුවාන්

65

JSON රූබි මැණික් ෂෙල් ස්ක්‍රිප්ට් එකකින් JSON මනාව සකස් කර ඇත:

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

පිටපත් බාගත කිරීම: gist.github.com/3738968


6
මෙම විසඳුම මගින් පයිතන් මෙන් නොව යුනිකෝඩ් "x uxxxx" ගැලවීමේ අනුක්‍රමය විකේතනය කරන බව සලකන්න json.tool. කෙසේ වෙතත්, එය කූඩු ගැඹුරේ සීමාවන් ( nesting of 20 is too deep (JSON::NestingError)) ද ඇති බව පෙනේ .
a3nm

2
උබුන්ටු මත ඔබට කළ හැකිය: sudo apt-get install ruby-json-pureඒ වෙනුවටgem install
ජැනස් ට්‍රොල්සන්

1
`` `eric-mbp: ~ ericstob $ sudo gem install json මුරපදය: ලබා ගැනීම: json-1.7.3.gem (100%) ස්වදේශික දිගු ගොඩ නැගීම. මෙය ටික වේලාවක් ගතවනු ඇත ... සාර්ථකව ස්ථාපනය කරන ලද json-1.7.3 1 මැණික් ස්ථාපනය කර ඇත json-1.7.3 සඳහා ri ප්‍රලේඛන ස්ථාපනය කිරීම ... json-1.7.3 සඳහා RDoc ප්‍රලේඛන ස්ථාපනය කිරීම ... eric-mbp: ~ ericstob $ prettify_json .rb -bash: prettify_json.rb: විධානය හමු නොවීය
එරික් හාර්ට්ෆර්ඩ්

සමහර විට ඔබට ඔබේ අන්තර්ගතය පළ කළ prettify_json.rbහැකිද?
ඇන්ඩෲ

ඔබට ස්ක්‍රිප්ට් එක බාගත කර ඔබගේ ~/binෆෝල්ඩරයට ගෙන යා හැකිය (එය ඔබගේ PATH හි ඇති බවට වග බලා ගන්න) නැවත නම් prettify_json.rbකර ppjක්‍රියාත්මක කරන්න chmod +x ppj. දැන් ඔබට වැනි දෙයක් කළ හැකියcurl www.jsonsring.com/something.json | ppj
යූරි

58

යාවත්කාලීන කිරීම jqවෙනත් පිළිතුරක යෝජනා කර ඇති පරිදි මම දැන් භාවිතා කරමි . JSON පෙරීමෙහිදී එය අතිශයින්ම බලවත් ය, නමුත්, එහි මූලික වශයෙන්, JSON නැරඹීම සඳහා ලස්සන ලෙස මුද්‍රණය කිරීමේ විශිෂ්ට ක්‍රමයකි.

jsonpp යනු ඉතා හොඳ විධාන රේඛාවක් වන JSON ලස්සන මුද්‍රණ යන්ත්‍රයකි.

README වෙතින්:

ඒ වගේ ලස්සන මුද්‍රිත වෙබ් සේවා ප්‍රතිචාර:

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

ඔබේ තැටියේ ධාවනය වන ලිපිගොනු අලංකාර කරන්න:

jsonpp data/long_malformed.json

ඔබ මැක් ඕඑස් එක්ස් හි සිටී නම්, ඔබට හැකිය brew install jsonpp. එසේ නොවේ නම්, ඔබට ද්විමය ඔබේ කොතැනක හෝ පිටපත් කළ හැකිය $PATH.


1
මම විශාල ගොනුවකට (> 60MB) එරෙහිව jsonpp (අතීතයේ සාර්ථක ලෙස භාවිතා කළෙමි) උත්සාහ කළෙමි. මම විනාඩි 5 කට පසුව එය නැවැත්තුවා. මම එය නල python -mjson.toolමාර්ගයට (මෙහි වෙනත් පිළිතුරකින්) තත්පර 10-20 ක් ගතවිය ...
වොල්කර්

JSON 60MB? වාව්! මම සාමාන්‍යයෙන් විශාල නමුත් දැන ගැනීමට ප්‍රයෝජනවත් ලිපිගොනු සමඟ ගනුදෙනු නොකරමි. ස්තූතියි.
ජෝර්ඩෙල්වර්

මගේ උබුන්ටු පෙට්ටියේ මා සතුව ඇත්තේ json_pp- එය jsonpp
ජේසන් මනාව හැඩගස්වන

57

මම එය කරන්නේ එයයි:

curl yourUri | json_pp

එය කේතය කෙටි කර කාර්යය ඉටු කරයි.


3
උබුන්ටු සේවාදායකය: ඔබට ඉතා සීමිත ස්ථාපනයන් සහිත නිෂ්පාදන යන්ත්‍ර තිබේ නම්, එය පෙරනිමියෙන් නිශ්චිත නමක් යටතේ ස්ථාපනය කර ඇති බැවින් මෙය හොඳම තේරීම විය හැකිය. අනුවාදය මත පදනම්ව පයිතන් බොහෝ විට විවිධ ආකාරවලින් ස්ථාපනය කර ඇත (උදා: පයිතන් 3, පයිතන් හෝ නැත).
ජොනතන්ජෝ

55

ලස්සන ජේසන් මුද්‍රණය සඳහා සරල බාෂ් පිටපතක්

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

උදාහරණයක්:

cat file.json | json_pretty.sh

1
ප්රතිචාර සඳහා ස්තූතියි. මම අද මෙම පිටපත පෞද්ගලික භාවිතය සඳහා ලියා ඇති අතර එය මගේ අවස්ථා වලදී හොඳින් ක්‍රියාත්මක විය. මම නිවැරදි කිරීම් කළා, දැන් එය කුඩා වන අතර මෙම ගැටළුව නොමැතිව. සම්පුර්ණයෙන්ම හැඩතල ගැන්වීමට ඉලක්කයක් නොමැත, නමුත් අවශ්‍ය නම් මට වෙනත් නිවැරදි කිරීම් කළ හැකිය.
එව්ගනි කාර්පොව්

2
එය මා සොයාගත් ක්‍රියාකාරී පිළිතුර පමණි. මම එබ්බවූ linux ඇති - කිසිදු රූබී, කිසිදු ජාවාස්ක්රිප්ට්, බාගත පිඹුරා මොඩියුලයක් අන්තර්ජාල පහසුකම් නැති ... මට සහය නොදක්වන බව තරමක් වෙනස් awk ඇති %*cමම වෙනස් නිසා අංකනය printfකිරීම c=0; while (c++<offset) printf " "; printf $0;. මගේ අවුලට වෙනස් රීජෙක්ස් ගැලවී යාමක් ඇති අතර බැක්ස්ලෑෂ් ක්‍රියා නොකරයි []. මම රීජෙක්ස් /^[[{]/සහ /[]}]/.
සබෝජ් කැම්පුල

2
මෙය සම්පුර්ණ ස්වදේශික බැවින් තෙවන පාර්ශවීය මෘදුකාංග අවශ්‍ය නොවන බැවින් මෙය පිළිගත යුතුය ...
Blag

1
VEvgenyKarpov ලස්සන ඇල්ලීම, සම්පූර්ණ පෙරළියක් අවශ්‍ය නොවේ, එය grepවැරදීමකින් මකා දැමූ එකක් පමණි;)
Blag

1
ස්තූතියි මචං, මට අවශ්‍ය වූයේ 8MB වන්-ලයිනර් ජේසන් එකක් සරල සරල හැඩතල ගැන්වීමයි.
අහමඩ් එම්

53

උත්සාහ කරන්න pjson. එයට වර්ණ ඇත!

echo '{"json": "obj"} |  pjson

මෙය ස්ථාපනය කරන්න pip:

⚡ pip install pjson

ඉන්පසු ඕනෑම JSON අන්තර්ගතයක් පයිප්ප කරන්න pjson.


එයට python-pip (sudo apt-get install python-pip) අවශ්‍ය වන අතර පසුව (sudo pip install pjson) විශාල වාසිය වන්නේ වර්ණ!
ක්‍රිස්ට්ජන් අඩෝජන්

1
අවාසිය නම් වර්ණ ප්‍රතිදානය ග්‍රහණය කරගත නොහැකි වීමයි.
ක්‍රිස්ට්ජන් අඩෝජන්

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

සටහන: නැත යන එය කිරීමට ක්රමයක්.

පර්ල්හි ද එයම ය:

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

සටහන 2: ඔබ දුවන්නේ නම්

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

මනාව කියවිය හැකි වචනය සංකේතවත් වේ

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

ඔබේ නල මාර්ගයේ ඉතිරි කොටස යුනිකෝඩ් හසුරුවනු ඇති අතර ඔබේ JSON ද මානව හිතකාමී වීමට කැමති නම්, සරලව භාවිතා කරන්න 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)'

ඔබට ලැබෙනු ඇත:

{
    "Düsseldorf": "lorem", 
    "bar": "ipsum"
}

ඇත්ත වශයෙන්ම මම එය කරන්නේ නමුත් ජාවාස්ක්‍රිප්ට් සමඟිනි :)
රොබට් ගුල්ඩ්

2
මා සතුව ඇති JSON මොඩියුලයේ අනුවාදයේ, to_jsonවිකල්ප පිළිගන්නා බවක් නොපෙනේ. නමුත් මෙය ක්‍රියාත්මක වේ:perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
R Decrd

පයිතන් උදාහරණය සරල කළ හැකිය. JSON ප්‍රතිදානය කෙලින්ම පයිප්ප කිරීම වඩා පහසුය python -m json.tool.
ඩෑන් ලොවෙන්හර්ස්

An දන්: ඔව්. json.toolකේත උදාහරණ පෙන්වන පිළිතුරු කිහිපයක් තිබේ . 1. මෙම අනුවාදය සමහර පරාමිතීන් උදා වෙනස් කිරීමට ඔබට ඉඩ ලබා දෙන අතර, indentPython 2.4 තවමත් භාවිතා කරන ලදී 2. පෝස්ට් (2008) වන අවස්ථාවේදී සහය නොදක්වන බව-mjson.tool
JFS

40

ඔබ විස්තර කරන දේ හරියටම කිරීමට මම jshon භාවිතා කරමි . දුවන්න:

echo $COMPACTED_JSON_TEXT | jshon

JSON දත්ත පරිවර්තනය කිරීම සඳහා ඔබට තර්ක ඉදිරිපත් කළ හැකිය.


ස්තූතියි, එකම කාර්යය සඳහා පයිතන් හෝ රූබී භාවිතා කරනවාට වඩා ජෝෂොන් වේගවත් ය
ඇලෙක්සැන්ඩර්

2
Lex ඇලෙක්සැන්ඩර් - ඔබට ලස්සන මුද්‍රණ යන්ත්‍රයක් අවශ්‍ය වන්නේ කෙසේද? මම පයිතන් පෙර ස්ථාපනය කර ඇති OSx ලයන් හි සිටිමි. Python -mjson.tool සමඟ මට 96KB json ගොනුවක් 0.1s වලින් මුද්‍රණය කළ හැකිය - jshon සමඟ සම්බන්ධ වන පස් ක්‍ෂේත්‍රයේ json ප්‍රතිදානය 24KB පමණ වන අතර 0.08s වලින් මට එය මුද්‍රණය කළ හැකිය. Jshon ඔබට කොතරම් වේගවත්ද?
joensson

1
මම 1 + GB සම්පීඩිත (කොතරම් විශාල සම්පීඩිත නොවනදැයි දන්නා) JSON දත්ත ගොනු සමඟ වැඩ කරමි, එබැවින් jshon වේගවත් යැයි යෝජනා කිරීම මම බෙහෙවින් අගය කරමි.
රයන් බැලැන්ටයින්

38

හෝ, රූබි සමඟ:

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

එය මට දෝෂයක් ලබා දෙයි. ඔබට රූබි ජේසන් පැකේජයක් ස්ථාපනය කිරීමට අවශ්‍යද?
mjs

3
ඔව්, ඔබට JSON රූබි මැණික් අවශ්‍යයි: sudo gem install json
darscan

AtMatSchaffer ඔබ අභිරුචි to_jsonක්‍රම සමඟ වස්තු අනුක්‍රමික කිරීමට JSON භාවිතා කරන්නේ නම් මෙය ක්‍රියාත්මක නොවන බව සලකන්න ; Kernel#jjඑකම (හෝ අංක / නූල් / බූලියන්) අරා සහ හැෂ් පමණක් මුද්‍රණය කරයි.
ෆ්‍රොග්ස්

වින්ඩෝස් හි මෙය උත්සාහ කරන්න: echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
රොස් ඇට්‍රිල්

36

ජාසෝර් බලන්න . එය රූබි භාෂාවෙන් ලියා ඇති සරල විධාන රේඛාවක් වන JSON විග්‍රහකයයි.

gem install jazor
jazor --help

4
OP හි ප්‍රශ්නයට සැබවින්ම පිළිතුරු සපයන එකම යෝජනාව මා පමණක්ද? මා මෙහි පැමිණියේ සරල විධානයක් සොයමින් මට ප්‍රතිදානය නල කළ හැකි අතර එය මා වෙනුවෙන් කළ curlඑකම එකයි.
ලියෝ කැසරනි

2
ප්‍රතිදානය වර්ණ ගැන්වීමේ විකල්පයක් එයට ඇති බව මම කැමතියි. කියවීම පහසු කරයි.
ඇන්ඩෲ

ooh ඒ වගේම මම මගේ බෝපාල් API ප්රතිදානය බැලීම සඳහා මෙම මා භාවිතා සිට url එක ද සමත් වූ විකල්පය වැනි
ඇන්ඩෲ

35

ප්‍රති result ලය ලබා ගැනීම සඳහා ඔබට මෙම සරල විධානය භාවිතා කළ හැකිය:

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

මගේ මතය අනුව හොඳම පිළිතුර. කුඩා හා මතක තබා ගැනීමට පහසු වන අතර සම්මත නොවන මෙවලම් ස්ථාපනය කිරීම අවශ්‍ය නොවේ.
ඉයුජින් සී

python -m json.tool JSON වස්තුවේ අනුපිළිවෙල ආරක්ෂා කරන බවක් නොපෙනේ.
pushNpop


28

ප්‍රතිදානය සරලව නල කරන්න jq ..

උදාහරණයක්:

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

කදිම පිළිතුර ks අක්ෂේ සිං සහ කෙනෙකුට එය පහසුවෙන් ගොනුවකට නැවත යොමු කළ හැකිය. උදාcat <file_name.txt> | jq . > <output_name.txt>
ප්‍රමිත්

9
brew install jqඔබ මැක් ඕඑස් හි සිටී නම්.
ඩිස්ට්වෝ

1
අවාසනාවකට මෙන්, jq .ලස්සන මුද්‍රණය සඳහා භාවිතා කිරීම එක් විභව අඩුපාඩුවක් ඇත: jq හි දැනට පවතින සියලුම අනුවාදයන් JSON අංක IEEE අංක ලෙස සැලකීමට අවධාරනය කරයි, එබැවින් නිරවද්‍යතාවය පහසුවෙන් නැති වී යයි, උදා: ඉතා විශාල සංඛ්‍යා සඳහා.
උපරිම

2
R ප්‍රමිට් cat file |යනු නිරන්තරයෙන් ක්‍රියාවලියක නාස්තියකි; කරන්න jq . <file_name.txt >output_name.txt(වචනාර්ථයෙන් <සහ >අක්ෂර වලින්).
මාර්ක් රීඩ්

25

පර්ල් සමඟ, ඔබ CPAN වෙතින් JSON :: PP ස්ථාපනය කළහොත් ඔබට json_pp විධානය ලැබෙනු ඇත . ඔබට ලැබෙන බී බයික්‍රොෆ්ට් වෙතින් උදාහරණය සොරකම් කිරීම :

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

json_ppඋබුන්ටු 12.04 (අවම වශයෙන්) සහ ඩෙබියන් ඉන් සමඟ පෙර ස්ථාපනය කර ඇති බව සඳහන් කිරීම වටී/usr/bin/json_pp


24

Pygmentize

මම පයිතන්ගේ json.tool පිග්මන්ටයිස් සමඟ ඒකාබද්ධ කරමි:

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

මගේ පිළිතුරේ ලැයිස්තුගත කර ඇති පිග්මන්ටයිස් සඳහා විකල්ප කිහිපයක් තිබේ .

මෙන්න සජීවී නිරූපණයක්:

නිරූපණය


5
සමහර විට pygmentize -l jsonවර්ණ ගැන්වීම සඳහා යමෙකු භාවිතා කළ යුතුය.
ජේපී

උචිත පැකේජය සමග ස්ථාපනය python-pygments, එනම්,apt-get install python-pygments
ජාන්

19

JSON :: XS perl මොඩියුලයට ඇතුළත් කර ඇති json_xs විධාන රේඛා උපයෝගීතාව භාවිතා කිරීමට මම නිර්දේශ කරමි. JSON :: XS යනු JSON අනුක්‍රමිකකරණය / අවලංගු කිරීම සඳහා වූ පර්ල් මොඩියුලයකි, ඩේබියන් හෝ උබුන්ටු යන්ත්‍රයක ඔබට එය මේ ආකාරයෙන් ස්ථාපනය කළ හැකිය:

sudo apt-get install libjson-xs-perl

එය පැහැදිලිවම CPAN හි ද ඇත .

URL එකකින් ලබාගත් JSON සංයුති කිරීම සඳහා එය භාවිතා කිරීම සඳහා ඔබට මේ ආකාරයට curl හෝ wget භාවිතා කළ හැකිය:

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

හෝ මෙය:

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

ගොනුවක අඩංගු JSON සංයුති කිරීමට ඔබට මෙය කළ හැකිය:

$ json_xs < file-full-of.json

සමහර අය JSON ට වඩා මානුෂිකව කියවිය හැකි යැයි සලකන YAML ලෙස නැවත ආකෘතිකරණය කිරීම :

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

19

ඔබට සරලවම jq හෝ json_pp වැනි සම්මත මෙවලම් භාවිතා කළ හැකිය.

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

හෝ

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

දෙකම පහත දැක්වෙන ආකාරයට ප්‍රතිදානය මනාව සැකසෙනු ඇත (jq ඊටත් වඩා වර්ණවත්):

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

Jq හි ඇති විශාල වාසිය නම්, ඔබ json විග්‍රහ කර සැකසීමට කැමති නම් එයට තවත් බොහෝ දේ කළ හැකිය.


json_pp මගේ මැක් මත විය - නමුත් jq නොවේ. ස්තූතියි!
ඩේවිඩ් එච්

1
Av ඩේවිඩ් - මෙය උදව් කරයි: stackoverflow.com/questions/37668134/…
ෂ්මිට්සි

ස්තූතියි! මීට පෙර කවදාවත් jq ගැන අසා නැත.
ඩේවිඩ් එච්

17

jj ඉතා වේගවත්, දැවැන්ත JSON ලේඛන ආර්ථික වශයෙන් හැසිරවිය හැකිය, වලංගු JSON අංක සමඟ පටලවා නොගනී, සහ භාවිතා කිරීමට පහසුය, උදා.

jj -p # for reading from STDIN

හෝ

jj -p -i input.json

එය (2018) තවමත් තරමක් අළුත් බැවින් සමහර විට එය ඔබ බලාපොරොත්තු වන ආකාරයට අවලංගු JSON හසුරුවන්නේ නැත, නමුත් ප්‍රධාන වේදිකාවල ස්ථාපනය කිරීම පහසුය.


16
  1. brew install jq
  2. command + | jq
  3. (උදාහරණ: curl localhost:5000/blocks | jq)
  4. විනෝද වන්න!

රූප විස්තරය මෙහි ඇතුළත් කරන්න


16

batcatසින්ටැක්ස් ඉස්මතු කරන ක්ලෝනයක්:

උදාහරණයක්:

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

-pශීර්ෂයන් නොමැතිව ප්‍රතිදානය -lකරනු ඇති අතර භාෂාව පැහැදිලිවම නියම කරයි.

එය JSON සඳහා වර්ණ ගැන්වීම සහ හැඩතල ගැන්වීම ඇති අතර මෙම විවරණයේ සඳහන් කර ඇති ගැටළු නොමැත : ෂෙල් ස්ක්‍රිප්ට් එකක JSON ලස්සනට මුද්‍රණය කරන්නේ කෙසේද?


12

පහත විධානය සමඟ yajl-tools ස්ථාපනය කරන්න:

sudo apt-get install yajl-tools

එවිට,

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


නියමයි. වෙනත් භාෂාවක් / පරිවර්තකයෙකු අවශ්‍ය නොවන අතර එය පැකේජයේ ඇත, පෙරීමට අවශ්‍ය නැත!
ජෝශප් රාගය
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.