আমি কীভাবে শেল স্ক্রিপ্টে JSON কে প্রিন্ট করতে পারি?


3060

মানব-পঠনযোগ্য আকারে JSON ফর্ম্যাট করার জন্য কি (ইউনিক্স) শেল স্ক্রিপ্ট রয়েছে?

মূলত, আমি এটি নিম্নলিখিত রূপান্তর করতে চাই:

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

... এরকম কিছুতে:

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


7
আমি আমার নিজের কিছুক্ষণ আগে ফিরে এলাম: github.com/exhuma/braindump/tree/master/jsonformat কোডটি খুব সহজ, পাইথনের নিজস্ব jsonলাইব্রেরি ব্যবহার করে , তবে সিনট্যাক্স হাইলাইট করার জন্য আমি পাইগমেন্টগুলিও যুক্ত করেছি।
exhuma

এতে হোঁচট খেয়েছে কিন্তু তারপরে জসন প্রেটি খুঁজে পেয়েছি এবং আমি এটি বেশ পছন্দ করি। টাইপকিট তাদের এপিআই উদাহরণগুলিতে এটি ব্যবহার করে, তাই এর পিছনে কিছুটা ক্লুআউট রয়েছে ^^
নিক টমলিন

আপনি যদি পেস্টটি অনুলিপি করতে আপত্তি না করেন তবে অনলাইনে এমন কিছু সাধারণ সরঞ্জামও রয়েছে যা জাসনোপ্রাইটিপ্রিন্ট ডট কম যেখানে আপনি খুব শীঘ্রই আপনার কাঁচা জেএসএন প্রিন্ট করতে পারবেন।
জাভাআ

7
সতর্কতা অবলম্বন করুন: পাইথন-এম json.tool সর্বদা বৈধ JSON উত্পাদন করে না। (ইঙ্গিত: 1e1000)
শিখর

উত্তর:


4458

পাইথন ২.6+ এর মাধ্যমে আপনি কেবল এটি করতে পারেন:

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

বা, যদি JSON কোনও ফাইলে থাকে তবে আপনি এটি করতে পারেন:

python -m json.tool my_json.json

যদি জেএসএন কোনও ইন্টারনেট উত্স যেমন এপিআই থেকে আসে তবে আপনি ব্যবহার করতে পারেন

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


72
pygmentize -l javascriptআপনার কমান্ড লাইনে সিনট্যাক্স রঙিন আউটপুট পেতে আপনি এটি পাইপ করতে পারেন। সম্পাদনা করুন : আপনার যদি পাইগমেন্টগুলি ইনস্টল থাকে তবে তা।
শ্রীকান্ত শরৎ

177
একটি মহান উত্তর, শুধুমাত্র সতর্ক আমি এটা দিয়ে এটা করে সাজানোর আউটপুট থাকা কীগুলি - যা আপনি সচেতন হতে হবে প্রয়োজন হতে পারে।
ক্রিস ন্যাশ

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

40
এটি ইউনিকোডের অক্ষরগুলিকে \ uXXXX এ পালাতে বলে মনে হচ্ছে এটি কোনও অসুবিধা হতে পারে।
ব্যবহারকারী 1071136

13
আমি একজন ওরফে তৈরি করেছি: alias pretty='python -mjson.tool | pygmentize -l jsonযাতে আমি শুধু চালাতে পারেন: command params | pretty। আশাকরি এটা সাহায্য করবে. পিএস: যে কেউ এটিকে প্রসারিত করতে পারে) ক) কার্ল আউটপুট আমি প্রতিবার দেখছি এবং মুছে ফেলুন এবং / অথবা খ) জসন কীগুলি বাছাই করবেন না; দয়া করে আমাকে জানাবেন, আমি অত্যন্ত কৃতজ্ঞ হব।
ক্লিন্ট ইস্টউড

1023

তুমি ব্যবহার করতে পার: 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
"জকিউ।" চমত্কার-প্রিন্টার হিসাবে দুর্দান্ত তবে এটি একটি ক্যাভিয়েট সহ এসেছে: জেকিউ (জেকিউ সংস্করণ 1.5 পর্যন্ত এবং এর অন্তর্ভুক্ত) খুব বড় এবং খুব ছোট সংখ্যার মানগুলিকে পরিবর্তন করবে কারণ এটি আইইইই 754 64-বিট মান হিসাবে সংখ্যাসূচক মানগুলিকে পার্স করে। আপনার প্রিয় প্রিন্ট-প্রিন্টারে একই সমস্যা রয়েছে কিনা তা পরীক্ষা করতে এই মানটি চেষ্টা করুন: 1e1000। দ্রষ্টব্য যে পাইথন -mjson.tool এই পরীক্ষাটিকে খারাপভাবে ব্যর্থ করে যেহেতু এটি অনন্ত উত্পাদন করে, যা জেএসওএনও নয়।
শিখর

1
একটি নোট হিসাবে, আপনি একটি ফাইল ফরম্যাট ফলাফলের পুনর্নির্দেশ করতে পারেন: echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . > myfile
চাদ

26
@ মেকোহি বিকল্প হ'ল প্রতিধ্বনির অপ্রয়োজনীয় ব্যবহার "। <<<অপারেটরটি পেয়ে খুব খুশি - ঠিক আমি যা খুঁজছিলাম।
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 -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \
  '{"foo":"lorem","bar":"ipsum"}'

রিটার্নস:

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

নোড.জেএস সহ ইউনিক্স কমান্ড-লাইন থেকে, একটি ফাইলের নাম উল্লেখ করে যাতে জেএসওএন রয়েছে এবং চারটি স্পেসের একটি ইন্ডেন্ট ব্যবহার করছে:

$ 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
নোড.জেএসে ডিবাগিং অবজেক্টগুলির জন্য, আপনার জেএসওএন.স্ট্রিংফাই () এর পরিবর্তে সত্যই sys.inspect () ব্যবহার করা উচিত। এখানে কেন: চিহ্নহানসন.কম.জিনিস
স্পিনসিং-

11
Downvoted। ওপি একটি "* নিক্স কমান্ড-লাইন স্ক্রিপ্ট" সম্পর্কে এবং এই উত্তরটি একটি ভিন্ন প্রসঙ্গ।
ড্যানরটন

49
@ এডান্টর্টন: জেএস কমান্ডলাইন থেকে নোড.জেএস এবং অন্যান্য অনুরূপ সমাধানের মাধ্যমে ব্যবহার করা যেতে পারে।
Calvinf

10
কনসোলের প্রয়োজন নেই: node -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"ফলাফলটি STDOUT এ আউটপুট করে।
জুলিয়ান ডি

2
এটি স্তন করে যে স্ক্রিপ্টটি বনাম স্টিডিনের একটি ফাইলের নামের জন্য আলাদা
লুকাশ ভিক্টর

340

আমি একটি সরঞ্জাম লিখেছি যার মধ্যে একটি সেরা "স্মার্ট হোয়াইটস্পেস" বিন্যাস উপলব্ধ। এটি এখানে অন্যান্য বিকল্পগুলির চেয়ে বেশি পঠনযোগ্য এবং কম ভার্বোস আউটপুট উত্পাদন করে।

আন্ডারস্কোর-CLI

"স্মার্ট হোয়াইটস্পেস" এর মতো দেখতে:

আমি কিছুটা পক্ষপাতদুষ্ট হতে পারি তবে কমান্ড-লাইন থেকে JSON ডেটা মুদ্রণ ও পরিচালনা করার জন্য এটি দুর্দান্ত একটি সরঞ্জাম for এটি ব্যবহারের জন্য অত্যন্ত বন্ধুত্বপূর্ণ এবং এতে বিস্তৃত কমান্ড লাইন সহায়তা / ডকুমেন্টেশন রয়েছে। এটি একটি সুইস আর্মি চাকু যা আমি 1001 বিভিন্ন ছোট ছোট কাজের জন্য ব্যবহার করি যা অন্য কোনও উপায়ে আশ্চর্যরকম বিরক্তিকর হবে।

সর্বশেষ ব্যবহারের ক্ষেত্রে: ক্রোম, ডেভ কনসোল, নেটওয়ার্ক ট্যাব, এইচআর ফাইল হিসাবে সমস্ত রফতানি করুন, "বিড়াল সাইট.হার | আন্ডারস্কোর '.url' --outfmt পাঠ্য নির্বাচন করুন; গ্রেপ মাইডোমাইন"; এখন আমার প্রতিষ্ঠানের সাইটটি লোড করার সময় তৈরি করা সমস্ত ইউআরএল ফেচগুলির ক্রনিকোলজিক অর্ডারযুক্ত তালিকা রয়েছে।

সুন্দর মুদ্রণ সহজ:

underscore -i data.json print

একই জিনিস:

cat data.json | underscore print

একই জিনিস, আরও স্পষ্ট:

cat data.json | underscore print --outfmt pretty

এই সরঞ্জামটি আমার বর্তমান আবেগের প্রকল্প, সুতরাং আপনার যদি কোনও বৈশিষ্ট্যের অনুরোধ থাকে তবে আমি তাদের সম্বোধন করার একটি ভাল সুযোগ রয়েছে।


4
আমিও আপডেট আমার ~ / .bash_profile নিম্নলিখিত লাইন আছে: ওরফে underscor = 'প্রশংসনীয় --outfmt প্রিন্ট আন্ডারস্কোর' এখন আমি শুধু কার্ল কি করতে পারেন example.com/result.json | আন্ডারস্কোর এবং এখনও অন্য ফর্ম্যাটিংয়ের জন্য আন্ডারস্কোর ব্যবহার করুন
গাল ব্রাচা

ধন্যবাদ ডেভ! সরঞ্জাম ভাল! ওরফে প্রিটি-জসন = "আন্ডারসোর সুন্দরী" এবং কার্ল আউটপুট একটি চোখকে সন্তুষ্ট করছে
ম্যাক্সিমম পোনোমারেভ

গ্রেট বিন্যাস টুল, মাত্র এক নোট: একটি ফাইল (হয় সঙ্গে ফরওয়ার্ডিং আউটপুট -o বিকল্প বা > ) শুধুমাত্র সঙ্গে কাজ করে আন্ডারস্কোর মুদ্রণআন্ডারস্কোর চমত্কার রং বিন্যাস লক্ষণ inserted হওয়ার সহ একটি ফাইল সংরক্ষণ করে, প্রস্তুত হত্তয়া মত: [32m, [33m, [39mতাদের প্রতিটি আগে কিছু মুদ্রণযোগ্য নয় এমন, যা তাদেরকে JSON বৈধ নয় তোলে করেন। তবে, একা আন্ডারস্কোর মুদ্রণ কোনও ফাইলে কিছু যুক্ত করে না এবং এর বিন্যাসের কাজটি পুরোপুরি করে।
টিউরিন

আমি ভালবাসি jqতবে এটি আমার "জেএসএন" এর জন্য দুর্দান্ত কাজ করেছে যার ডাবল উদ্ধৃত চাবি নেই।
ব্লু

@ ডেভডপসন দুর্দান্ত সরঞ্জামের জন্য ধন্যবাদ !! এটি jsonselect.org/#tryit পাশাপাশি ব্যবহার করার চেষ্টা করবে ...
মাইকার্গাস

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


: আপনি নোড ইনস্টল করা আছে (এবং YAML শৈলী আউটপুট কিছু মনে না করেন) যদি সেখানে এই প্যাকেজ এর rafeca.com/prettyjson আপনার সাথে একটি কার্ল শেষ করতে পারেন, যাতে | prettyjson
Iolo

3
উপরে উল্লিখিত হিসাবে, জেএসএন প্রিটি-প্রিন্টার হিসাবে পাইথন -mjson.tool এর একটি সমস্যা হ'ল এটি সর্বদা জেএসএনকে নির্গত করে না। উদাহরণস্বরূপ 1e1000 অনন্ত হয়ে যায় (পাইথন 2.x বা 3.x ব্যবহার করে)। 'জকিউ।' সর্বদা জেএসএন উত্পাদন করে তবে এটি গ্যারান্টি দেয় না যে খুব বড় (বা খুব ছোট মান) ঠিক সংরক্ষণ করা হয়েছে।
শিখর

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
িকটোফায়

আপনি এই সহ স্ট্যান্ডার্ড ইনপুট থেকে পড়তে স্ক্রিপ্ট পরিবর্তন করতে পারেন: inputFile = sys.stdin। এটি আপনাকে স্ক্রিপ্টের মতো জিনিসগুলি পাইপ করতে দেয়:curl http://somewhere.com/foo.json | pp_json.py
গাবে জনসন

1
আর @ icktoofay এর মন্তব্য, ভালো আমদানি OrderedDict সঙ্গে বাছাই এড়াতে: from collections import OrderedDict
হুগো

2
ধন্যবাদ এই আমাকে অনুসরণ তেজ ফাংশন তৈরি করার অনুমতি দেওয়া 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=(',', ': '))" লক্ষ্য করুন বিভাজক ( ',', ':') বলে সেট করা আবশ্যক trailing এড়াতে হোয়াইটস্পেস যোগ করা হচ্ছে: bugs.python.org/issue16333
blindsnowmobile

দুর্দান্ত স্নিপেট! আমি sort_keys = Trueপরিবর্তে ব্যবহার করেছি , কারণ আমি জেসন ফাইলগুলির তুলনা করতে এটি ব্যবহার করতে চাই এবং এটি একটি কবজির মতো কাজ করে।
জেএল পেয়ারেট

81

আপনি যদি এনএমপি এবং নোড.জেএস ব্যবহার করেন, আপনি করতে পারেন npm install -g jsonএবং তারপরে কমান্ডটি পাইপ করতে পারেন json। কি json -hসব বিকল্প পাওয়ার জন্য। এটি নির্দিষ্ট ক্ষেত্রগুলিও বের করে এবং আউটপুটটিকে রঙিন করতে পারে -i

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

79

এটি জেকিউ সরঞ্জামগুলির সাথে কোনও নেটিভ পদ্ধতিতে খুব সহজ নয় ।

উদাহরণ স্বরূপ:

cat xxx | jq .

7
সতর্কতা: জেকিউ নম্বরগুলি আইইইই 754 64-বিট ভাসমান হিসাবে এনকোড করে এবং এভাবে তাদের প্রতিনিধিত্বের পরিবর্তনের সম্ভাবনা রয়েছে। খুব ছোট এবং খুব বড় সংখ্যকটির নির্ভুলতা হারিয়ে যাওয়ার সম্ভাবনা রয়েছে। আপনার প্রিয় প্রিন্ট-প্রিন্টারে একই সমস্যা রয়েছে কিনা তা পরীক্ষা করতে এই মানটি চেষ্টা করুন: 1e1000।
শিখর

5
বা সহজভাবে jq . file.json:; তবে এটিও cat file.json | jq(ফিল্টার ছাড়াই .) কাজ করে। (উবুন্টু / লিনাক্সে; প্ল্যাটফর্ম জুড়ে ymmv)
মাইকেল 6

73

পার্লের সাথে, সিপিএএন মডিউলটি ব্যবহার করুন 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। "পিপি" "খাঁটি পার্ল" এর জন্য - এই সরঞ্জামটি কেবল পার্লে প্রয়োগ করা হয়, বাহ্যিক সি লাইব্রেরির সাথে আবদ্ধ না করে (যা এক্সএসকে বোঝায়, পার্লের "এক্সটেনশন সিস্টেম")।


9
সাইগউইনের সাথে স্ট্যান্ডার্ড আসবে বলে মনে হচ্ছে!
জানুস ট্রোলসেন

12
json_pp একইভাবে ব্যবহার করা যেতে পারে এবং সম্ভবত আপনার সিস্টেমে সহজেই ইনস্টল করা থাকে (ডিবায়ানে এটি 'পার্ল' প্যাকেজে রয়েছে)।
মিচিয়েলবি

8
এফওয়াইআই, আমার ম্যাক ওএস এক্স 10.9 সিস্টেমে, json_pp স্বয়ংক্রিয়ভাবে উপলব্ধ।
গ্রেগ উইলিয়ামস

-t nullআমাকে নাল দিয়েছে : একটি বৈধ টোফর্ম্যাট নয় ... তবে এটিকে রেখে সুন্দরভাবে কাজ করেছে। ধন্যবাদ।
লুকাস

পিপি খাঁটি পার্লের জন্য, এখানে খুব সুন্দর প্রিন্ট নয় :) যেহেতু json_xs এবং json_pp কেবল সুন্দর মুদ্রণের চেয়ে আরও বেশি কিছু করতে পারে এবং জেএসন_ওপ্ট সুন্দর প্রিন্টিংয়ের পরিবর্তে অন্যান্য কাজ করতে পারে। যদিও সুন্দর মুদ্রণটি ডিফল্ট আচরণ।
কেজেটিল এস।

70

* নিক্সে, স্টিডিন থেকে পড়া এবং স্টাডআউটে লেখা আরও ভাল কাজ করে:

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

এটিকে আপনার পাঠাতে এবং chmod +xএটিতে একটি ফাইলে (আনিসের উত্তরের পরে আমার নাম "সুন্দর জেএসওন" রাখুন ) এবং আপনি যেতে ভাল।


আসলে, স্টিডিন / স্টাডাউট ব্যবহার করা অনেক বেশি নমনীয় এবং সহজ। এটা ইশারা জন্য ধন্যবাদ।
আনিসি

3
প্রোগ্রামগুলির জন্য যা একটি নামকৃত ফাইল প্রত্যাশা করে, / dev / stdin, ditto এর বাইরে এবং ত্রুটিযুক্ত ব্যবহার করুন।
dvogel

4
fileinput.input()কমান্ড-লাইনে কোনও ফাইল দেওয়া না থাকলে এফওয়াইআই স্টিডিনের কাছ থেকে পড়ে। উদাহরণ
jfs

ফাইলিনপুট.ইনপুট () শেষবারে নতুন লাইন না থাকায় ফাইলগুলি ভালভাবে মোকাবেলা করতে পারে না, আমি শেষবার যাচাই করেছিলাম।
জাচারি ভ্যানস

সে শেল স্ক্রিপ্টে জিজ্ঞাসা করে, অন্য ভাষার অজগর নয়। জিকিউ সহ এটি নিখুঁতভাবে করতে পারে।
বুই আন আন তুয়ান

65

জেএসওন রুবি জহর জেএসওনকে প্রিটিফাই করতে শেল স্ক্রিপ্টের সাথে একত্রিত হয়েছে:

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

স্ক্রিপ্ট ডাউনলোড: gist.github.com/3738968


6
নোট করুন যে এই দ্রবণটি পাইথনের সাথে পৃথক, ইউনিকোড "xx uxxxx" এস্কেপ সিকোয়েন্সগুলি ডিকোড করে json.tool। তবে এটিতেও নীড়ের গভীরতার সীমাবদ্ধতা রয়েছে বলে মনে হয় ( nesting of 20 is too deep (JSON::NestingError))।
a3nm

2
উবুন্টুতে আপনি এটি করতে পারেন: sudo apt-get install ruby-json-pureপরিবর্তেgem install
জানুস ট্রয়লসন

1
`` `এরিক-এমবিপি: ~ এরিকস্টব $ সুডো রত্ন ইনস্টল করুন জাসন পাসওয়ার্ড: আনয়ন: json-1.7.3.gem (100%) নেটিভ এক্সটেনশনগুলি বিল্ডিং। এটি কিছুটা সময় নিতে পারে ... json-1.7.3 সফলভাবে ইনস্টল করা 1 মণি ইনস্টল json-1.7.3 এর জন্য রি ডকুমেন্টেশন ইনস্টল করা হচ্ছে ... json-1.7.3 এর জন্য আরডোক ডকুমেন্টেশন ইনস্টল করা হচ্ছে ... এরিক-এমবিপি: ~ এরিকস্টব $ prettify_json .rb -bash: prettify_json.rb: কমান্ড পাওয়া যায়নি
এরিক হার্টফোর্ড

আপনি কি আপনার বিষয়বস্তু পোস্ট করতে পারে prettify_json.rb?
অ্যান্ড্রু

আপনি স্ক্রিপ্টটি ডাউনলোড করতে পারেন, এটি আপনার ~/binফোল্ডারে স্থানান্তরিত করতে পারেন (নিশ্চিত করুন এটি আপনার প্যাথ-এ রয়েছে) নাম পরিবর্তন prettify_json.rbকরতে ppjএবং চালাতে পারে chmod +x ppj। এখন আপনি যেমন কিছু করতে পারেনcurl www.jsonsring.com/something.json | ppj
উরি

58

আপডেটjq অন্য উত্তর হিসাবে পরামর্শ হিসাবে আমি এখন ব্যবহার করছি । এটি JSON ফিল্টার করার ক্ষেত্রে অত্যন্ত শক্তিশালী, তবে এটির সবচেয়ে প্রাথমিক, দেখার জন্য জেএসওএন প্রিন্ট করার দুর্দান্ত উপায় aw

jsonpp একটি খুব সুন্দর কমান্ড লাইন JSON সুন্দর প্রিন্টার।

পুনরায় পড়া থেকে:

সুন্দর মুদ্রণ ওয়েব পরিষেবা প্রতিক্রিয়া যেমন:

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

এবং আপনার ডিস্কে চলমান ফাইলগুলি সুন্দর করুন:

jsonpp data/long_malformed.json

আপনি যদি ম্যাক ওএস এক্সে থাকেন তবে আপনি এটি করতে পারেন brew install jsonpp। যদি তা না হয় তবে আপনি কেবল বাইনারিটি আপনার কোথাও অনুলিপি করতে পারেন $PATH


1
আমি একটি বিশাল ফাইলের (> 60 এমবি) বিপরীতে জেসনপ্প (অতীতে সফল হিসাবে ব্যবহৃত) চেষ্টা করেছি। আমি 5 মিনিটের পরে এটি বন্ধ করলাম। আমি এটিতে পাইপ দিয়েছিলাম python -mjson.tool(অন্য উত্তর থেকে এখানে) এবং এটি 10-20 সেকেন্ড নিয়েছিল ...
ভোলার

JSON এর 60MB? কি দারুন! আমি সাধারণত যে ফাইলগুলি জানার পক্ষে বড় তবে দরকারী হয় না। ধন্যবাদ।
জর্ডেলভার

আমার উবুন্টু বাক্সে আমার একটি রয়েছে json_pp- যা জসনকে সুন্দরভাবে ফর্ম্যাট করে, যদিও নামকরণে মিল থাকলেও আমি jsonppএখানে উল্লেখ করা থেকে সম্পূর্ণ ভিন্ন প্রকল্প বলে বিশ্বাস করি
ডেভিডপ্রিসিদেভ

56

আমি এটি কিভাবে করি:

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
এটি কেবলমাত্র উত্তর খুঁজে পেয়েছি found আমি একটি এমবেডেড লিনাক্স আছে - কোন Rubby, কোন জাভাস্ক্রিপ্ট, ডাউনলোড পাইথন মডিউল করার জন্য ইন্টারনেটের সাথে কোন অ্যাক্সেস ... আমি কিছুটা ভিন্ন awk যে সমর্থন করে না আছে %*cস্বরলিপি তাই আমি পরিবর্তিত printfকরতে c=0; while (c++<offset) printf " "; printf $0;। এবং আমার অ্যাজকের মধ্যে বিভিন্ন রেগেক্স পলায়ন রয়েছে এবং ব্যাকস্ল্যাশ কাজ করে না []। আমি রেজিক্সগুলি পরিবর্তন করেছিলাম /^[[{]/এবং /[]}]/
জাবোজ ক্যাম্পুলা

2
এই গৃহীত হওয়া উচিত, যেমন পূর্ণ নেটিভ এবং থার্ড পার্টি সফটওয়্যার প্রয়োজন হয় না ...
Blag

1
@EvgenyKarpov চমৎকার ক্যাচ একটি পূর্ণ রোলব্যাক জন্য কোন প্রয়োজন শুধু grepযে ভুল করে মুছে ফেলা হয়;)
Blag

1
ধন্যবাদ দোস্ত, আমি খালি সরল ব্যাশে 8 এমবি ওয়ান-লাইনার জসনকে ফর্ম্যাট করার দ্রুত উপায় চেয়েছিলাম।
আহমেদ এম

53

ব্যবহার করে দেখুন pjson। এর রং আছে!

প্রতিধ্বনি '। "json": "আপত্তি"} |  pjson

এটি দিয়ে এটি ইনস্টল করুন pip:

⚡ pip install pjson

এবং তারপরে যে কোনও JSON সামগ্রীকে পাইপ করুন pjson


এটি পাইথন-পাইপ (sudo apt-get ইনস্টল পাইথন-পিপ) প্রয়োজন এবং তারপরে (sudo pip 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
আমার কাছে থাকা জেএসওএন মডিউলটির সংস্করণে to_jsonবিকল্পগুলি গ্রহণ করার মতো মনে হচ্ছে না। তবে এটি কাজ করে:perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
রুর্ট

পাইথন উদাহরণ সরল করা যেতে পারে। সরাসরি JSON আউটপুটটি পাইপ করা এটি আরও সহজ python -m json.tool
ড্যান লোয়েহের্জেজ

@ ড্যান: হ্যাঁ এবং বেশ কয়েকটি উত্তর রয়েছে যা json.toolকোড উদাহরণ দেখায় । ১. এই সংস্করণটি আপনাকে কিছু প্যারামিটারগুলি পরিবর্তন করতে দেয় যেমন, indent২. পোস্টিংয়ের সময় (২০০৮) পাইথন ২.৪ এখনও ব্যবহৃত হয়েছিল যা সমর্থন করে না-mjson.tool
jfs

40

আপনি যা বর্ণনা করছেন ঠিক তেমন করতে আমি jshon ব্যবহার করি । শেষ ঘন্টা:

echo $COMPACTED_JSON_TEXT | jshon

আপনি JSON ডেটা রূপান্তর করতে আর্গুমেন্টগুলিও পাস করতে পারেন।


ধন্যবাদ, একই কাজের জন্য অজগর বা রুবি ব্যবহারের চেয়ে জ্বশান অনেক দ্রুত
আলেকজান্ডার

2
@ আলেকজান্ডার - আপনার কত দ্রুত একটি প্রিন্টারের দরকার? আমি ওএসএক্স সিংহের সাথে রয়েছি যেটি পাইথনের সাথে পূর্বনির্ধারিত রয়েছে। পাইথন -mjson.tool দিয়ে আমি 0.1s এর মধ্যে একটি 96KB জেসন ফাইলটি প্রিন্ট করতে পারি - জ্যাশনের সাথে জড়িত লিঙ্কযুক্ত আর্থফোনের জসন আউটপুট প্রায় 24KB এবং আমি 0.08 এর দশকে এটি প্রিন্ট করতে পারি। জ্বশান আপনার পক্ষে কত দ্রুত?
জোনসন

1
আমি 1 + জিবি সংক্ষেপিত (যারা আরও বড় সংকোচিতও জানে) JSON ডেটা ফাইলগুলির সাথে কাজ করছি, সুতরাং জিশন দ্রুততর হওয়ার পরামর্শটি আমি খুব প্রশংসা করি।
রায়ান বালান্টিনি

38

বা, রুবির সাথে:

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

এটি আমাকে একটি ত্রুটি দেয়। আপনার কি কিছু রুবি জেসন প্যাকেজ ইনস্টল করা দরকার?
mjs

3
হ্যাঁ, আপনার
জেএসএন

@ ম্যাটশ্যাফার নোট করুন যে আপনি যদি কাস্টম to_jsonপদ্ধতিতে বস্তুগুলিকে সিরিয়ালাইজ করতে JSON ব্যবহার করছেন তবে এটি কাজ করে না ; Kernel#jjএকই (বা সংখ্যা / স্ট্রিং / বুলিয়ান) এর অ্যারে এবং হ্যাশগুলি কেবল প্রিন্ট করে।
ফ্রেগজ

উইন্ডোজে, এটি চেষ্টা করুন: echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
রস অ্যাট্রিল

36

পরীক্ষা করে দেখুন Jazor । এটি রুবিতে লিখিত একটি সাধারণ কমান্ড লাইন জেএসএন পার্সার।

gem install jazor
jazor --help

4
এটি কি কেবল আমার বা এটিই একমাত্র পরামর্শ যা আসলে ওপির প্রশ্নের উত্তর দেয়? আমি এখানে একটি সাধারণ কমান্ড সন্ধান করতে এসেছি যাতে আমি আউটপুটটি পাইপ করতে পারি curlএবং এটিই আমার জন্য এটি করেছে।
লিও কাসারানী

2
আমি পছন্দ করি যে এটিতে আউটপুটটি রঙিন করার বিকল্প রয়েছে। এটি পড়া সহজ করে তোলে।
অ্যান্ড্রু

ওও আমি ইউআরএল পাস করার বিকল্পটিও পছন্দ করি যেহেতু আমি আমার REST এপিআই
অ্যান্ড্রু

35

আপনি ফলাফলটি অর্জন করতে এই সাধারণ আদেশটি ব্যবহার করতে পারেন:

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

আমার মতে সেরা উত্তর। ছোট এবং স্মরণে রাখা সহজ এবং কোনও মানহীন সরঞ্জাম ইনস্টল করার প্রয়োজন নেই।
ইউজিন সি

পাইথন-মি json.tool JSON অবজেক্টের ক্রম সংরক্ষণ করে বলে মনে হচ্ছে না।
পুশপপ

31

জেএসনলিন্টের গিটহাবের উপর একটি ওপেন-সোর্স বাস্তবায়ন রয়েছে যা কমান্ড লাইনে ব্যবহার করা যেতে পারে বা নোড.জেএস প্রকল্পে অন্তর্ভুক্ত করা যেতে পারে।

npm install jsonlint -g

এবং তারপর

jsonlint -p myfile.json

অথবা

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

28

কেবল আউটপুটটি পাইপ করুন jq .

উদাহরণ:

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

চমৎকার উত্তর @ আকশায়ে সিং এবং সহজেই কোনও ফাইলটিতে এটি পুনরায় নির্দেশ করতে পারে। উদাহরণস্বরূপcat <file_name.txt> | jq . > <output_name.txt>
প্রমিত P ই

9
brew install jqযদি আপনার ম্যাক ওএস এ থাকে
Distwo

1
দুর্ভাগ্যক্রমে, jq .প্রিন্টিং-প্রিন্টিংয়ের জন্য ব্যবহারের একটি সম্ভাব্য ত্রুটি রয়েছে: জেউ এর সমস্ত বিদ্যমান সংস্করণগুলি জেএসওএন সংখ্যাগুলিকে আইইইই সংখ্যা হিসাবে বিবেচনা করার জন্য জোর দেয়, তাই নির্ভুলতা সহজেই হারিয়ে যায়, যেমন খুব বড় পূর্ণসংখ্যার জন্য।
শিখর

2
@ প্রমিট cat file |হ'ল একটি প্রক্রিয়া নষ্ট করা; শুধু jq . <file_name.txt >output_name.txt(আক্ষরিক <এবং >অক্ষর সহ) করুন।
মার্ক রিড 13

24

Pygmentize

আমি পাইথনের জসন.টুলকে পাইগামেন্টাইজের সাথে একত্রিত করি:

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

পিগমেনটিজ করার জন্য কিছু বিকল্প রয়েছে যা তালিকাভুক্ত রয়েছে আমার

এখানে একটি লাইভ ডেমো রয়েছে:

ডেমো


5
কখনও কখনও pygmentize -l jsonকলরিফিকেশন পেতে ব্যবহার করা প্রয়োজন।
জেপি

কার্যক্ষম প্যাকেজের সাথে ইনস্টল করুন python-pygments, অর্থাত্apt-get install python-pygments
জানুয়ারী

23

পার্লের সাথে, আপনি সিপিএএন থেকে জেএসএন :: পিপি ইনস্টল করলে আপনি json_pp কমান্ড পাবেন। চুরি উদাহরণ থেকে বি Bycroft আপনি পান:

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

এটি উল্লেখযোগ্য যে json_ppউবুন্টু 12.04 (কমপক্ষে) এবং ডেবিয়ান ইন এর সাথে প্রাক-ইনস্টল করা রয়েছে/usr/bin/json_pp


19

আমি json_xs কমান্ড লাইন ইউটিলিটি ব্যবহার করার পরামর্শ দিচ্ছি যা JSON :: XS পার্ল মডিউলটিতে অন্তর্ভুক্ত রয়েছে। জেএসওএন :: এক্সএস হ'ল জেসনকে সিরিয়ালাইজেশন / ডিসাইরিয়ালাইজ করার জন্য পার্ল মডিউল, কোনও দেবিয়ান বা উবুন্টু মেশিনে আপনি এটি ইনস্টল করতে পারেন:

sudo apt-get install libjson-xs-perl

এটি স্পষ্টতই উপলব্ধ সিপিএএন-

কোনও ইউআরএল থেকে প্রাপ্ত জেএসএন ফর্ম্যাট করতে এটি ব্যবহার করতে আপনি কার্ল বা উইজেট ব্যবহার করতে পারেন:

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

অথবা এটা:

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

এবং একটি ফাইলে থাকা জেএসএন ফর্ম্যাট করতে আপনি এটি করতে পারেন:

$ json_xs < file-full-of.json

ওয়াইএএমএল হিসাবে পুনরায় ফর্ম্যাট করা , যা কিছু লোক জেএসওনের চেয়ে মানবিকভাবে পঠনযোগ্য বলে মনে করে:

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

19

আপনি কেবল জেকিউ বা জসন_পিপি-র মতো স্ট্যান্ডার্ড সরঞ্জামগুলি ব্যবহার করতে পারেন।

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

অথবা

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

উভয়ই নীচের মতো আউটপুট উপস্থাপন করবে (জকিউ আরও বেশি রঙিন):

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

জেউ-এর বিশাল সুবিধা হ'ল আপনি যদি জেসনকে বিশ্লেষণ করতে এবং প্রক্রিয়া করতে চান তবে এটি আরও অনেক কিছু করতে পারে।


json_pp আমার ম্যাক এ ছিল - তবে জকিউ নয়। ধন্যবাদ!
ডেভিড এইচ

1
: - @DavidH এই সাহায্য করে stackoverflow.com/questions/37668134/...
Schmitzi

ধন্যবাদ! এর আগে জেকের কথা কখনও শুনিনি।
ডেভিড এইচ

17

জেজে অতি দ্রুত, জিনোমাস জেএসওএন নথিগুলি অর্থনৈতিকভাবে পরিচালনা করতে পারে, বৈধ জেএসওএন সংখ্যার সাথে গোলমাল করে না এবং ব্যবহার করা সহজ, উদাহরণস্বরূপ

jj -p # for reading from STDIN

অথবা

jj -p -i input.json

এটি (2018) এখনও বেশ নতুন তাই সম্ভবত এটি আপনার প্রত্যাশার মতো অবৈধ JSON পরিচালনা করবে না, তবে বড় প্ল্যাটফর্মগুলিতে এটি ইনস্টল করা সহজ।



16

bat ইহা একটি catসিনট্যাক্স হাইলাইট সহ ক্লোন:

উদাহরণ:

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

-pশিরোনাম ছাড়া আউটপুট, এবং -lস্পষ্টভাবে ভাষা নির্দিষ্ট করবে।

এটা তোলে শোভা এবং JSON জন্য বিন্যাস এবং নেই করেছে না সমস্যা এই মন্তব্যে উল্লেখ আছে: আমি কিভাবে শেল স্ক্রিপ্ট-এ তাদেরকে JSON প্রিটি-প্রিন্ট করতে পারি?


12

নীচের কমান্ডের সাথে ইয়াজল-সরঞ্জামগুলি ইনস্টল করুন:

sudo apt-get install yajl-tools

তারপর,

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


অসাধারণ. অন্য ভাষা / দোভাষীর প্রয়োজন হয় না এবং প্যাকেজ রেপোতে থাকে, তৈরি করার দরকার নেই!
জোসেফ লাস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.