json मैं शैल स्क्रिप्ट में जेएसओएन को सुंदर-प्रिंट कैसे कर सकता हूं?




unix command-line (20)

Pygmentize

मैं पायथन के साथ पाइथन की json.tool गठबंधन:

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

Pygmentize के कुछ विकल्प हैं जो मेरे इस जवाब में सूचीबद्ध हैं।

यहां एक लाइव डेमो है:

https://code.i-harness.com

क्या मानव-पठनीय रूप में जेएसओएन प्रारूपित करने के लिए एक (यूनिक्स) खोल स्क्रिप्ट है?

असल में, मैं इसे निम्नलिखित में बदलना चाहता हूं:

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

... इस तरह कुछ में:

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

वेनिला बैश

तीसरे पक्ष के इंस्टॉल के बिना, सुंदर जेएसओएन प्रिंटिंग के लिए एक सरल बैश स्क्रिप्ट ( 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) विंडो से फ़ाइल (यूटीएफ 8 आधारित) से विंडोज जीआईटी बैश के साथ प्रयोग करें:

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)

इसे एक फ़ाइल में रखें (मैंने AnC के जवाब के बाद मेरा "सुंदरजसन" नाम दिया है) अपने पैथ और chmod +x , और आप जाने के लिए अच्छे हैं।


JSON रूबी जेम JSON को प्रसन्न करने के लिए एक शेल स्क्रिप्ट के साथ बंडल किया गया है:

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

स्क्रिप्ट डाउनलोड: gist.github.com/3738968


इस तरह मैं यह करता हूं:

gem install jazor
jazor --help

यह कोड को छोटा करता है और काम पूरा करता है।


जेएफ सेबेस्टियन के बहुत उपयोगी पॉइंटर्स के लिए धन्यवाद, यहां एक छोटी सी लिपि गई स्क्रिप्ट है जिसके साथ मैं आया हूं:

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

पर्ल के साथ, यदि आप सीपीएएन से 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 साथ पूर्व-स्थापित /usr/bin/json_pp


पर्ल के साथ, सीपीएएन मॉड्यूल JSON::XS उपयोग करें। यह एक कमांड लाइन उपकरण json_xs स्थापित करता है।

मान्य करें:

json_xs -t null < myfile.json

JSON फ़ाइल src.json को pretty.json को pretty.json :

< src.json json_xs > pretty.json

यदि आपके पास json_xs नहीं है, तो json_xs json_pp । "पीपी" "शुद्ध पर्ल" के लिए है - उपकरण को केवल बाह्य पब्लिक लाइब्रेरी (जो एक्सएस का खड़ा है, पर्ल की "एक्सटेंशन सिस्टम") के बाध्यकारी के बिना पर्ल में लागू किया जाता है।


बस jq . को आउटपुट पाइप करें jq .

उदाहरण:

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

मैं JSON.stringify के "स्पेस" तर्क का JSON.stringify जावास्क्रिप्ट में सुंदर प्रिंट 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 -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));\
 });\
"

मैं आमतौर पर बस करता हूं:

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

मैं जो भी वर्णन कर रहा jshon उसे ठीक करने के लिए मैं jshon का उपयोग करता jshon । बस दौडो:

echo $COMPACTED_JSON_TEXT | jshon

आप JSON डेटा को बदलने के लिए तर्क भी पास कर सकते हैं।


यदि आप npm और node.js का उपयोग करते हैं, तो आप npm install -g json कर सकते हैं और फिर npm install -g json माध्यम से कमांड पाइप कर सकते हैं। सभी विकल्पों को पाने के लिए json -h करें। यह विशिष्ट फ़ील्ड भी खींच सकता है और आउटपुट को -i साथ रंगीन कर सकता है।

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

यह jq टूल्स के साथ देशी तरीके से बहुत आसान नहीं है।

उदाहरण के लिए:

cat xxx | jq .

JSONLint पास JSONLint पर ओपन-सोर्स कार्यान्वयन कमांड लाइन पर इस्तेमाल किया जा सकता है या node.js प्रोजेक्ट में शामिल किया जा सकता है।

npm install jsonlint -g

और फिर

jsonlint -p myfile.json

या

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

yajlमेरे अनुभव में बहुत अच्छा है। मैं निम्नलिखित पंक्ति को मेरे द्वारा डालने में json_reformatसुंदर-प्रिंट .jsonफ़ाइलों में इसके आदेश का उपयोग करता vimहूं .vimrc:

autocmd FileType json setlocal equalprg=json_reformat

Jazor । यह रूबी में लिखी गई एक साधारण कमांड लाइन JSON पार्सर है।

curl yourUri | json_pp

jj सुपर-फास्ट है, आर्थिक रूप से विशाल JSON दस्तावेजों को संभाल सकता है, वैध JSON संख्याओं के साथ गड़बड़ नहीं करता है, और उपयोग करना आसान है, उदाहरण के लिए

jj -p # for reading from STDIN

या

jj -p -i input.json

यह अभी भी काफी नया है (2018) तो शायद यह आपके द्वारा अपेक्षित तरीके से अमान्य JSON को संभाल नहीं पाएगा, लेकिन प्रमुख प्लेटफ़ॉर्म पर इंस्टॉल करना आसान है।


PHP संस्करण, यदि आपके पास PHP> = 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

मैं 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
 }




pretty-print