unix - كيف يمكنني طباعة JSON في نص برمجي صغير؟




command-line format pretty-print (25)

على * لا شىء ، القراءة من 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 هو ، وأنت جيد أن تذهب.

هل هناك برنامج نصي shell (Unix) لتنسيق JSON في نموذج قابل للقراءة من قبل الإنسان؟

في الأساس ، أريد أن أحول ما يلي:

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

... إلى شيء من هذا القبيل:

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

عادة ما أفعل فقط:

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

واسترداد البيانات المحددة (في هذه الحالة ، قيمة "test"):

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 Ruby Gem مع نص برمجي shell لإضفاء الطابع الشخصي على JSON:

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

تنزيل البرنامج النصي: gist.github.com/3738968


أو مع روبي:

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

بفضل النصائح المفيدة للغاية لـ JF Sebastian ، إليك برنامج نصي مُحسّن قليلاً لقد توصلت إلى:

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

Pygmentize

أنا أضم json.tool بايثون مع pygmentize:

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

هناك بعض البدائل ل pygmentize التي ترد في هذه الإجابة .

هنا عرض حي:


أنا أستخدم 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
 }

حاول pjson . لديها الألوان!

تثبيته مع pip :

⚡ pip install pjson

ثم توجيه أي محتوى JSON إلى pjson .


مع Perl ، إذا قمت بتثبيت JSON::PP من CPAN ، فستحصل على الأمر json_pp . سرقة example من B Bycroft تحصل عليه:

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

من الجدير بالذكر أن json_pp يأتي مثبتًا مسبقًا مع Ubuntu 12.04 (على الأقل) وديبيان في /usr/bin/json_pp


ببساطة الأنابيب الإخراج إلى jq . .

مثال:

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

$ 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))'

تصبح الكلمة المقروءة بشكل رائع \ u ترميز

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

إذا كان الجزء المتبقي من خط الأنابيب الخاص بك سيتم التعامل معه بطريقة سهلة وترغب في أن يكون JSON الخاص بك أيضًا صديقًا للبشر ، use ببساطة 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"
}

  1. brew install jq
  2. command + | jq
  3. (مثال: curl localhost:5000/blocks | jq )
  4. استمتع!


انها ليست بسيطة جدا مع طريقة الأم مع أدوات jq .

فمثلا:

cat xxx | jq .

فانيلا باش

برنامج نصي بسيط لـ Bash ( grep / awk ) لطباعة JSON الجميلة ، بدون تثبيت جهة خارجية:

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) الاستخدام مع النوافذ GIT Bash من ملف إلى ملف (UTF8):

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

أوصي باستخدام الأداة المساعدة لسطر الأوامر json_xs المتضمنة في وحدة JSON :: XS perl. JSON :: XS هي وحدة بيرل لإجراء تسلسل / إلغاء تسلسل JSON ، على جهاز Debian أو Ubuntu يمكنك تثبيته على النحو التالي:

sudo apt-get install libjson-xs-perl

ومن الواضح أنه متاح أيضا على CPAN .

لاستخدامه لتنسيق JSON تم الحصول عليه من عنوان URL ، يمكنك استخدام 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

لإعادة تنسيق كـ YAML ، والذي يعتبره بعض الأشخاص أكثر قابلية للقراءة على المستوى الإنساني من JSON:

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

تحقق من Jazor . انها بسيطة سطر JSON محلل مكتوبة في روبي.

curl yourUri | json_pp

تثبيت yajl-tools باستخدام الأمر أدناه:

sudo apt-get install yajl-tools

ثم،

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


أستخدم jshon ما تصفه بالضبط. فقط قم بتشغيل:

echo $COMPACTED_JSON_TEXT | jshon

يمكنك أيضًا تمرير الوسيطات لتحويل بيانات JSON.


JSONLint لديه تطبيق مفتوح المصدر على جيثب يمكن استخدامها على سطر الأوامر أو المدرجة في مشروع node.js.

npm install jsonlint -g

وثم

jsonlint -p myfile.json

أو

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

إذا كنت تستخدم npm و Node.js ، فيمكنك إجراء npm install -g json ثم توجيه الأمر عبر json . هل json -h للحصول على جميع الخيارات. يمكن أيضًا سحب حقول محددة وتهيئة الإخراج باستخدام -i .

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

yajl لطيفة جدا ، في تجربتي. json_reformat أمر json_reformat الخاص به لطباعة ملفات .json في vim عن طريق وضع السطر التالي في ملفي .vimrc :

autocmd FileType json setlocal equalprg=json_reformat

مع Python 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 وسيكون متاحًا في كل مرة في shell. prettyjson_s '{"foo": "lorem", "bar": "ipsum"}' مثل prettyjson_s '{"foo": "lorem", "bar": "ipsum"}' .


jj سريع جدًا ، ويمكنه التعامل مع مستندات JSON ginormous اقتصاديًا ، ولا تعبث بأرقام 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

استخدم Newtonsoft.Json دلل. هذا يعمل بشكل جيد في IE و Chrome

ضع هذا الرمز في طريقة عرض الحلاقة

    if (Model.YourJsonSting!= null)
        {
            <pre>
            <code style="display:block;white-space:pre-wrap">
                      @JToken.Parse(Model.YourJsonSting).ToString(Formatting.Indented)
                </code>
            </pre>
        }




json unix command-line format pretty-print