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




json validator (20)

Pygmentize

আমি Python এর json.tool একত্রিত সঙ্গে একত্রিত:

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

এই উত্তর আমার তালিকাভুক্ত করা হয় pygmentize কিছু বিকল্প আছে।

এখানে একটি লাইভ ডেমো:

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

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

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

... এরকম কিছু

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

ভ্যানিলা বাশ

সুন্দর 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

* নিক্সে, 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 এর উত্তরের পরে আমার "সুন্দর জসন" নামকরণ করেছি) এবং আপনি যেতে ভাল।


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

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

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


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

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

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

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

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

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

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

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

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

আমি 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

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

underscore-cli

এই "স্মার্ট হোয়াইটস্পেস" এরকম কি দেখাচ্ছে:

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

সর্বশেষ ব্যবহার-কেস: ক্রোম, ডেভ কনসোল, নেটওয়ার্ক ট্যাব, এইচএআর ফাইল হিসাবে সব এক্সপোর্ট করুন, "cat site.har | underscore নির্বাচন করুন '। Url' --outfmt text | grep mydomain"; এখন আমার কাছে আমার কোম্পানির সাইটের লোডিংয়ের সময় তৈরি সমস্ত URL টির ক্রেনোলজি অনুসারে অর্ডার দেওয়া তালিকা রয়েছে।

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

underscore -i data.json print

একই জিনিস:

cat data.json | underscore print

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

cat data.json | underscore print --outfmt pretty

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


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

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

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

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

নিচে কমান্ড দিয়ে yajl-tools ইনস্টল করুন:

sudo apt-get install yajl-tools

তারপর,

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


পার্ল দিয়ে, আপনি যদি 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


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


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

gem install jazor
jazor --help

এটি কোড সংক্ষিপ্ত করে এবং কাজ সম্পন্ন পায়।


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

উদাহরণ:

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

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

autocmd FileType json setlocal equalprg=json_reformat

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

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

⚡ pip install pjson

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


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

jj -p # for reading from STDIN

অথবা

jj -p -i input.json

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


আপডেট আমি অন্য উত্তর দেওয়া হিসাবে এখন 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 কোথাও বাইনারি অনুলিপি করতে পারেন।





pretty-print