পাইথনে জেএসনকে কীভাবে সুন্দরী করা যায়?


100

কেউ কি পরামর্শ দিতে পারেন যে আমি কীভাবে পাইথনে বা কমান্ড লাইনের মাধ্যমে জেএসএনকে সুন্দর করতে পারি?

একমাত্র অনলাইন ভিত্তিক জেএসএন বিউটিফায়ার যা এটি করতে পারে তা হ'ল: http://jsonviewer.stack.hu/

তবে পাইথনের মধ্যে থেকে আমার এটি ব্যবহার করা দরকার।

এটি আমার ডেটাসেট:

{ "head": {"vars": [ "address" , "description" ,"listprice" ]} , "results": { "bindings": [ 
    {
        "address" : { "type":"string", "value" : " Dyne Road, London NW6"},
            "description" :{ "type":"string", "value" : "6 bed semi detached house"},
            "listprice" : { "type":"string", "value" : "1,150,000"}
    }
    ,
        {
            "address" : { "type":"string", "value" : " Tweedy Road, Bromley BR1"},
            "description" :{ "type":"string", "value" : "5 bed terraced house"},
            "listprice" : { "type":"string", "value" : "550,000"}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Vera Avenue, London N21"},
            "description" :{ "type":"string", "value" : "4 bed detached house"},
            "listprice" : { "type":"string", "value" : "

                995,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Wimbledon Park Side, London SW19"},
            "description" :{ "type":"string", "value" : "3 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Westbere Road, West Hampstead, London NW2"},
            "description" :{ "type":"string", "value" : "5 bedroom  semi detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " The Avenue, Hatch End, Pinner HA5"},
            "description" :{ "type":"string", "value" : "5 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Princes Park Avenue, London NW11"},
            "description" :{ "type":"string", "value" : "4 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Canons Drive, Edgware HA8"},
            "description" :{ "type":"string", "value" : "4 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Westbere Road, West Hampstead NW2"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Haymills Estate, Ealing, London"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Dene Terrace Woodclyffe Drive, Chislehurst, Kent BR7"},
            "description" :{ "type":"string", "value" : "5 bedroom  terraced house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Dene Terrace Woodclyffe Drive, Chislehurst, Kent BR7"},
            "description" :{ "type":"string", "value" : "5 bedroom  semi detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Northwick Close, St John's Wood NW8"},
            "description" :{ "type":"string", "value" : "3 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Claremont Gardens, Surbiton KT6"},
            "description" :{ "type":"string", "value" : "13 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Dene Terrace Woodclyffe Drive, Chislehurst, Kent BR7"},
            "description" :{ "type":"string", "value" : "5 bedroom  end terrace house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Stamford Road, London N1"},
            "description" :{ "type":"string", "value" : "4 bedroom  terraced house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Stanhope Avenue, London N3"},
            "description" :{ "type":"string", "value" : "6 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Haymills Estate, Ealing, London"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Elms Crescent, London SW4"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Princes Park Avenue, London NW11"},
            "description" :{ "type":"string", "value" : "4 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Abbeville Road, London SW4"},
            "description" :{ "type":"string", "value" : "4 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Canons Drive, Edgware HA8"},
            "description" :{ "type":"string", "value" : "4 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Henson Avenue, Willesdon Green NW2"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Woodstock Road, London NW11"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Tamworth Street, London SW6"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Stanhope Avenue, Finchley, London"},
            "description" :{ "type":"string", "value" : "5 bedroom  semi detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " The Old Burlington, Church Street, London W4"},
            "description" :{ "type":"string", "value" : "3 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Ebury Close, Northwood HA6"},
            "description" :{ "type":"string", "value" : "4 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Middleton Road, London NW11"},
            "description" :{ "type":"string", "value" : "4 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Henson Avenue, Willesden Green NW2"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Huron Road, London SW17"},
            "description" :{ "type":"string", "value" : "6 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Corringway, Ealing W5"},
            "description" :{ "type":"string", "value" : "5 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Woodlands Avenue, New Malden KT3"},
            "description" :{ "type":"string", "value" : "5 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Gunnersbury Park Area, Ealing, London"},
            "description" :{ "type":"string", "value" : "6 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Blenheim Gardens, London, Brent NW2"},
            "description" :{ "type":"string", "value" : "6 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Creighton Road, London NW6"},
            "description" :{ "type":"string", "value" : "4 bedroom  terraced house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Plaistow Lane, Bromley BR1"},
            "description" :{ "type":"string", "value" : "7 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Greenfield Gardens, London NW2"},
            "description" :{ "type":"string", "value" : "4 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Hendon Avenue, London N3"},
            "description" :{ "type":"string", "value" : "3 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Peckham Park Road, London SE15"},
            "description" :{ "type":"string", "value" : "6 bedroom  semi detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Woodclyffe Drive, Chislehurst BR7"},
            "description" :{ "type":"string", "value" : "5 bedroom  house for sale"},
            "listprice" : { "type":"string", "value" : "

                From 1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Highwood Hill, Mill Hill, London"},
            "description" :{ "type":"string", "value" : "5 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Stanhope Avenue, London N3"},
            "description" :{ "type":"string", "value" : "5 bedroom  semi detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Kersley Mews, London SW11"},
            "description" :{ "type":"string", "value" : "3 bedroom  mews for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Ebury Close, Northwood HA6"},
            "description" :{ "type":"string", "value" : "4 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Ellesmere Road, Chiswick W4"},
            "description" :{ "type":"string", "value" : "6 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " The Avenue, Hatch End, Pinner, Middlesex"},
            "description" :{ "type":"string", "value" : "5 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Wandsworth, London SW18"},
            "description" :{ "type":"string", "value" : "6 bedroom  semi detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Carlton Road, New Malden KT3"},
            "description" :{ "type":"string", "value" : "4 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " St Mary's Mews, Ealing W5"},
            "description" :{ "type":"string", "value" : "3 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Ritherdon Road, Balham, London SW17"},
            "description" :{ "type":"string", "value" : "5 bedroom  semi detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Goldsmith Avenue, London W3"},
            "description" :{ "type":"string", "value" : "5 bedroom  property for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ,
        {
            "address" : { "type":"string", "value" : " Plaistow Lane, Bromley, Kent BR1"},
            "description" :{ "type":"string", "value" : "7 bedroom  detached house for sale"},
            "listprice" : { "type":"string", "value" : "

                1,250,000


                    "}
        }
    ] } }

6
আমি প্রশ্নের শিরোনামটি (সুন্দরী) পছন্দ করি :)
গাই অভ্রাহাম

উত্তর:


187

কমান্ড-লাইন থেকে:

echo '{"one":1,"two":2}' | python -mjson.tool

কোন ফলাফল:

{
    "one": 1, 
    "two": 2
}

প্রোগ্রামটিক্যালি, পাইথন ম্যানুয়ালটি জেএসওএন-কে প্রিন্টিংয়ের সুন্দর বর্ণনা দেয় :

>>> import json
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
{
    "4": 5,
    "6": 7
}


34

একটি সর্বনিম্ন ইন-পাইথন দ্রবণ যা কমান্ড লাইনের মাধ্যমে সরবরাহিত জসন ডেটা রঙ করে:

import sys
import json
from pygments import highlight, lexers, formatters

formatted_json = json.dumps(json.loads(sys.argv[1]), indent=4)
colorful_json = highlight(unicode(formatted_json, 'UTF-8'), lexers.JsonLexer(), formatters.TerminalFormatter())
print(colorful_json)

pjsonউপরে উল্লিখিত দ্বারা অনুপ্রাণিত । এই কোডটি pygmentsইনস্টল করা দরকার।

আউটপুট উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন


খুব দরকারী. ঠিক আমি কী সন্ধান করছিলাম - আইপিথনে জেএসএন ডেটা আউটপুটগুলিকে সুন্দর করে তোলার জন্য। ধন্যবাদ
nonbeing

এখানে সর্বোত্তম উত্তর, এটিতে জসন.ডাম্পস ব্যবহার করে একটি লাইন রয়েছে () পাইথন ৩..7 এ আইওএইচটিপি দিয়ে এটি ব্যবহার করার জন্য সাইস মডিউল এবং ইউনিকোড (স্ট্রিং, এনকোডিং) ব্যবহার করার দরকার নেই। মূলত এটি == হাইলাইট (formatted_json, lexers.JsonLexer (), formatters.TerminalFormatter ()) হয়ে
DanglingPointer

4
পাইথন 3 এর সাথে আমার কেবল ইউনিকোড () কলটি সরিয়ে ফেলতে হবে কারণ পাইথন 3-এ ডিফল্ট ইউনিকোড রয়েছে।
খাদ্য

সুন্দর এবং সহজ সমাধান।
সায়ন্তন

17

আন্ডারস্কোর-ক্লাই্ট চেষ্টা করুন :

cat myfile.json | underscore print --color

এটি একটি সুন্দর নিফটি সরঞ্জাম যা মার্জিতভাবে স্ট্রাকচার্ড ডেটা হেরফের করতে পারে, জেএস স্নিপেটগুলি কার্যকর করতে পারে, টেমপ্লেটগুলি পূরণ করতে পারে ইত্যাদি। এটি হাস্যকরভাবে ডকুমেন্টেড, পালিশযুক্ত এবং গুরুতর ব্যবহারের জন্য প্রস্তুত। এবং আমি এটি লিখেছি। :)


14

পাইথ কমান্ডটি আমি এর জন্য পাইথনের সাথে ব্যবহার করেছি:

cat myfile.json | python -mjson.tool

আপনি এখানে আরও তথ্য সন্ধান করতে সক্ষম হওয়া উচিত:

http://docs.python.org/library/json.html


কট্টর অপব্যবহারের এটি দুর্ভাগ্যজনক উদাহরণ। পৃথক প্রক্রিয়া তৈরি না করে এবং সাধারণের সাথে একগুচ্ছ অকৃত্রিম স্মৃতি-অনুলিপি তৈরি না করে একই ফলাফল অর্জন করা যায়python -mjson.tool < myfile.json
মিখাইল টি।

4
আমি কি আমার বিড়ালদের খাওয়ানো পছন্দ করি? : পি
হার্মিজ

বর্তমান লাইনে :.!python -mjson.tool
ইনডেন্ট করার

8

দেখে মনে হচ্ছে যে জেসবিউটিফায়ার তাদের সরঞ্জামগুলি খোলা সন্ধান করেছে এবং সেগুলিকে পাইথন এবং জেএস লাইবস এবং সি এল আই সরঞ্জাম হিসাবে প্যাকেজ করেছে। দেখে মনে হচ্ছে না যে তারা কোনও ওয়েব পরিষেবাতে কল করে, তবে আমি খুব কাছ থেকে পরীক্ষা করে দেখিনি। ইনস্টল নির্দেশাবলী সহ গিথুব রেপো দেখুন ।


পাইথন সিএলআই এবং গ্রন্থাগার ব্যবহারের জন্য তাদের ডক্স থেকে:

অজগর ব্যবহার করে সুন্দর করা:

$ pip install jsbeautifier
$ js-beautify file.js

সুন্দরী আউটপুট যায় stdout

jsbeautifierলাইব্রেরি হিসাবে ব্যবহার করা সহজ:

import jsbeautifier
res = jsbeautifier.beautify('your javascript string')
res = jsbeautifier.beautify_file('some_file.js')

... বা, কিছু বিকল্প নির্দিষ্ট করতে:

opts = jsbeautifier.default_options()
opts.indent_size = 2
res = jsbeautifier.beautify('some javascript', opts)

আপনি যদি কোনও ফাইলের পরিবর্তে একটি স্ট্রিং পাস করতে চান এবং আপনি ব্যাশ ব্যবহার করছেন তবে আপনি প্রক্রিয়া বিকল্পটি এভাবে ব্যবহার করতে পারেন:

$ js-beautify <(echo '{"some": "json"}')

7

আমি json.dumps (...) -> আমার স্বাদ উপায় খুব নতুন লাইনের জন্য আউটপুট পছন্দ করি না। এবং আমি কোনও কমান্ড লাইন সরঞ্জাম ব্যবহার করতে বা কিছু ইনস্টল করতে চাইনি। আমি অবশেষে পাইথনসের প্রিন্ট (= প্রিন্ট মুদ্রণ) পেয়েছি । দুর্ভাগ্যক্রমে এটি যথাযথ JSON উত্পন্ন করে না তবে আমি মনে করি সংরক্ষিত ডেটাতে ব্যবহারকারীর জন্য বন্ধুত্বপূর্ণ গলিম্পস রাখা দরকারী।

আউটপুট json.dumps(json_dict, indent=4)

{
    "hyperspace": {
        "constraints": [],
        "design": [
            [
                "windFarm.windparkSize.k",
                "continuous",
                [
                    0,
                    0,
                    5
                ]
            ],
            [
                "hydroPlant.primaryControlMax",
                "continuous",
                [
                    100,
                    300
                ]
            ]
        ],
        "kpis": [
            "frequency.y",
            "city.load.p[2]"
        ]
    },
    "lhc_size": 10,
    "number_of_runs": 10
}

প্রিন্টের ব্যবহার:

import pprint

json_dict = {"hyperspace": {"constraints": [], "design": [["windFarm.windparkSize.k", "continuous", [0, 0, 5]], ["hydroPlant.primaryControlMax", "continuous", [100, 300]]], "kpis": ["frequency.y", "city.load.p[2]"]}, "lhc_size": 10, "number_of_runs": 10}

formatted_json_str = pprint.pformat(json_dict)
print(formatted_json_str)
pprint.pprint(json_dict)

এর ফলাফল pprint.pformat(...)বা pprint.pprint(...):

{'hyperspace': {'constraints': [],
                'design': [['windFarm.windparkSize.k', 'continuous', [0, 0, 5]],
                           ['hydroPlant.primaryControlMax',
                            'continuous',
                            [100, 300]]],
                'kpis': ['frequency.y', 'city.load.p[2]']},
 'lhc_size': 10,
 'number_of_runs': 10}

5
alias jsonp='pbpaste | python -m json.tool'

এটি ওএসএক্সের ক্লিপবোর্ডে থাকা জেএসএনকে প্রিন্ট করবে। কেবল এটি অনুলিপি করুন এবং তারপরে একটি বাশ প্রম্পট থেকে ওরফে কল করুন।


5

আপনি আউটপুট পাইপ করতে পারে jq। আপনি পাইথন স্ক্রিপ্টে এর মতো কিছু থাকে

print json.dumps(data)

তাহলে আপনি গুলি চালাতে পারেন:

python foo.py | jq '.'

jq একটি দুর্দান্ত সরঞ্জাম।
ওরিওন এলিজিল


2

প্রথমে পাইগমেন্টগুলি ইনস্টল করুন

তারপর

echo '<some json>' | python -m json.tool | pygmentize -l json


1

আপনার ডেটা খারাপভাবে গঠিত। বিশেষত মান ক্ষেত্রগুলিতে অসংখ্য স্পেস এবং নতুন লাইন রয়েছে। স্বয়ংক্রিয় বিন্যাসগুলি এতে কাজ করবে না, কারণ তারা আসল ডেটা পরিবর্তন করবে না। আপনি আউটপুট জন্য ডেটা তৈরি করার সময় ফাঁকা স্থান এড়াতে প্রয়োজন হিসাবে এটি ফিল্টার।


0

জসনলিন্ট সহ (এক্সমিলিন্টের মতো):

aptitude install python-demjson
jsonlint -f foo.json
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.