validator একটি শেল স্ক্রিপ্টে আমি কিভাবে সুন্দর প্রিন্ট JSON করতে পারি?




json validator (24)

মানুষের পাঠযোগ্য আকারে JSON ফর্ম্যাট করতে একটি (ইউনিক্স) শেল স্ক্রিপ্ট আছে?

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

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

... এরকম কিছু

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

অথবা, রুবি সঙ্গে:

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

পার্ল দিয়ে, আপনি যদি CPAN থেকে JSON::PP ইনস্টল করেন তবে আপনি json_pp কমান্ড পাবেন। বি বাইক্রফ্টের example চুরি করে আপনি:

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

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


এটি jq সরঞ্জামগুলির সাথে একটি স্থানীয় ভাবে খুব সহজ নয়।

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

cat xxx | jq .

JSONLint এ একটি ওপেন-সোর্স বাস্তবায়ন কমান্ড লাইনে বা node.js প্রকল্পে অন্তর্ভুক্ত করা যেতে পারে।

npm install jsonlint -g

এবং তারপর

jsonlint -p myfile.json

অথবা

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

আপনি ব্যবহার করতে পারেন: jq

এটি ব্যবহার করা খুব সহজ এবং এটি দুর্দান্ত কাজ করে! এটি স্ট্রিম সহ, অনেক বড় JSON কাঠামো হ্যান্ডেল করতে পারেন। আপনি here তাদের টিউটোরিয়াল খুঁজে পেতে পারেন।

এখানে একটি উদাহরণ:

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

অথবা অন্য কথায়:

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

আমি সাধারণত শুধু কি:

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

yajl আমার অভিজ্ঞতা, খুব চমৎকার। আমি আমার json_reformat কমান্ডটিকে vim মধ্যে json_reformat -প্রিন্ট .json ফাইলগুলিতে নিচের লাইনটি রেখে আমার json_reformat ব্যবহার করি:

autocmd FileType json setlocal equalprg=json_reformat

পাইথন 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"}' মতো এটি আমন্ত্রণ করুন।


JSON রবি জেমটি JSON কে সুন্দর করে সাজানোর জন্য একটি শেল স্ক্রিপ্টের সাথে যুক্ত হয়:

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

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


আমি httpie ব্যবহার httpie

$ pip install httpie

এবং আপনি এটি ভালো ব্যবহার করতে পারেন

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

পিএইচপি সংস্করণ, যদি আপনার পিএইচপি থাকে = = 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

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

echo $COMPACTED_JSON_TEXT | jshon

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


jj সুপার-ফাস্ট, অর্থনৈতিক JSON ডকুমেন্টগুলি হ্যান্ডেল করতে পারে, বৈধ JSON সংখ্যার সাথে জগাখিচুড়ি করে না এবং এটি ব্যবহার করা সহজ, উদাহরণস্বরূপ

jj -p # for reading from STDIN

অথবা

jj -p -i input.json

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


  1. brew install jq
  2. command + | jq
  3. (উদাহরণ: curl localhost:5000/blocks | jq )
  4. উপভোগ করুন!


আমি json_xs কমান্ড লাইন ইউটিলিটি ব্যবহার করে যা JSON :: XS perl মডিউলে অন্তর্ভুক্ত। JSON :: XS একটি ডেবিয়ান বা উবুন্টু মেশিনে JSON serializing / deserializing করার জন্য একটি পার্ল মডিউল, আপনি এটি এটিকে ইনস্টল করতে পারেন:

sudo apt-get install libjson-xs-perl

এটা সম্ভবত CPAN পাওয়া যায়।

একটি URL থেকে প্রাপ্ত JSON ফর্ম্যাট করতে এটি ব্যবহার করার জন্য আপনি এই মত কার্ল বা 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

YAML হিসাবে সংস্কার করতে, যা কিছু লোক JSON এর চেয়ে বেশি মানবিক-পাঠযোগ্য বলে মনে করে:

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

আমি JSON এর "স্থান" আর্গুমেন্টটি ব্যবহার করি। জাভাস্ক্রিপ্টে প্রশংসনীয়-মুদ্রণ JSON JSON.stringify

উদাহরণ:

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

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

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

README থেকে:

তাই ভালো প্রিন্ট ওয়েব সেবা প্রতিক্রিয়া:

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

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

jsonpp data/long_malformed.json

আপনি যদি Mac OS X এ থাকেন, তবে আপনি brew install jsonpp করতে পারেন। যদি না হয়, আপনি কেবল আপনার $PATH কোথাও বাইনারি অনুলিপি করতে পারেন।


* নিক্সে, 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)

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


জেএফ সেবাস্তিয়ানের খুব সহায়ক পয়েন্টারকে ধন্যবাদ, এখানে একটি সামান্য বর্ধিত স্ক্রিপ্ট যা আমি নিয়ে এসেছি:

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

পার্ল সহ, CPAN মডিউল JSON::XS ব্যবহার করুন। এটি একটি কমান্ড লাইন সরঞ্জাম json_xs ইনস্টল করে।

বৈধতাকরণ করতে বলছি:

json_xs -t null < myfile.json

সুন্দর.জson থেকে JSON ফাইল src.json কে pretty.json :

< src.json json_xs > pretty.json

আপনার যদি json_xs না থাকে তবে json_xs চেষ্টা করুন। "পিপি" "বিশুদ্ধ পার্ল" এর জন্য হয় - সরঞ্জামটি শুধুমাত্র পার্লে প্রয়োগ করা হয়, বহিরাগত সি লাইব্রেরিতে কোনও বাইন্ডিং ছাড়াই (যা এক্সএ দাঁড়িয়ে থাকে, পার্লের "এক্সটেনশন সিস্টেম")।


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

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

pjson চেষ্টা করুন। এটা রং আছে!

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

⚡ pip install pjson

এবং তারপর pjson কোন JSON কন্টেন্ট পাইপ।


শুধু jq . আউটপুট পাইপ jq .

উদাহরণ:

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

ভ্যানিলা বাশ

সুন্দর JSON মুদ্রণের জন্য একটি সহজ বাশ স্ক্রিপ্ট ( grep / awk ), তৃতীয় পক্ষ ইনস্টল ছাড়া:

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

উদাহরণ:

1) কনসোল ফাইল এবং চমত্কার মুদ্রণ পড়ুন

cat file.json | json_pretty.sh

2) ফাইল থেকে ফাইল (UTF8 ভিত্তিক) উইন্ডোজ জিআইটি ব্যাশ সহ ব্যবহার করুন:

cat fileIn.json |sh.exe json_pretty.sh > fileOut.json




pretty-print