কিভাবে একটি JSON ফাইল প্রশংসাপত্র?


1056

আমার কাছে একটি জেএসওএন ফাইল রয়েছে যা একটি জগাখিচুড়ি যে আমি প্রশংসাপত্রটি চাই - অজগরটিতে এটি করার সহজতম উপায় কী? আমি জানি যে প্রিট্টি প্রিন্ট একটি "অবজেক্ট" নেয়, যা আমি মনে করি যে এটি একটি ফাইল হতে পারে, তবে কীভাবে কোনও ফাইল পাস করতে হবে তা আমি জানি না - কেবল ফাইল নাম ব্যবহার করে কাজ হয় না।


9
json.loads()ফলস্বরূপ অভিধানটি ব্যবহার করে জেএসএনকে বিশ্লেষণ করার চেষ্টা করুন এবং প্রিন্ট করুন। অথবা কেবলমাত্র পাইথন ডকুমেন্টেশনের সুন্দর মুদ্রণ বিভাগে যান । json
ব্লেন্ডার


1
@ ব্লেন্ডার আপনি যদি কোনও উত্তর পোস্ট করেন আমি আপনাকে ক্রেডিট দেব ... এটি ডুপ্লিকেট হিসাবে বন্ধ হয়ে যেতে পারে, কারণ সমাধান একই, তবে প্রশ্নটি ভিন্ন, সম্ভবত না so
কলেন 21

18
<your_file.js python -mjson.tool@ এড এর লিঙ্ক হিসাবে কেন না ?
jfs

11
আমি এটি সদৃশ মনে করি না কারণ কমান্ড লাইন থেকে প্রিন্ট-প্রিন্টিং পাইথন থেকে প্রোগ্রামিয়ালি প্রিন্টিং-প্রিন্টিংয়ের মতো নয়। পুনরায় খুলতে ভোট।
ভিটাউট

উত্তর:


1655

jsonমডিউল দিয়ে ইতিমধ্যেই কিছু মৌলিক চমত্কার মুদ্রণ প্রয়োগ indentসংক্রান্ত পরামিতি:

>>> import json
>>>
>>> your_json = '["foo", {"bar":["baz", null, 1.0, 2]}]'
>>> parsed = json.loads(your_json)
>>> print(json.dumps(parsed, indent=4, sort_keys=True))
[
    "foo", 
    {
        "bar": [
            "baz", 
            null, 
            1.0, 
            2
        ]
    }
]

একটি ফাইল পার্স করতে, ব্যবহার করুন json.load():

with open('filename.txt', 'r') as handle:
    parsed = json.load(handle)

142
সহজ প্রিন্ট-প্রিন্টিংয়ের জন্য এটি সুস্পষ্ট পার্সিং ছাড়াই কাজ করে:print json.dumps(your_json_string, indent=4)
পিটারিনো

1
ইনডেন্ট কি করে?
টিমব্রাম

8
@ টিটিবিরাম: এটিতে ফাঁকা স্থান সংখ্যা।
ব্লেন্ডার

9
ইনডেন্ট ব্যতীত আপনি কেবল কুরুচিপূর্ণ পাঠ্যের একটি লাইন পাবেন, এজন্যই আমি এখানে এসেছি।
krs013

5
@ পেটারিনো আমাকে প্রথমে জেসন স্ট্রিংটি পার্স করতে হয়েছিল: print(json.dumps(json.loads(your_json_string), indent=2))অন্যথায় এটি আমাকে একটি
পালানোর

310

আপনি কমান্ড লাইনে এটি করতে পারেন:

python3 -m json.tool some.json

(যেমনটি ইতিমধ্যে প্রশ্নের মন্তব্যে উল্লেখ করা হয়েছে, পাইথন 3 পরামর্শের জন্য @ কাই পেটজকে ধন্যবাদ)

কমান্ড লাইনে জেসন প্রসেসিংয়ের বিষয়ে অজগরটি আসলে আমার প্রিয় সরঞ্জাম নয় not সাধারণ সুন্দর প্রিন্টিংয়ের জন্য ঠিক আছে, তবে আপনি যদি জসনকে পরিচালনা করতে চান তবে এটি অতিরিক্ত জটিল হয়ে উঠতে পারে। আপনাকে শীঘ্রই একটি পৃথক স্ক্রিপ্ট-ফাইল লিখতে হবে, আপনি যে মানচিত্রগুলি "" কিছু-কী "(পাইথন ইউনিকোড) দিয়ে শেষ করতে পারেন, যা ক্ষেত্রগুলি নির্বাচন আরও জটিল করে তোলে এবং সত্যই সুন্দর দিকের দিকে যায় না doesn't -printing।

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

jq . some.json

এবং আপনি বোনাস হিসাবে রঙ পান (এবং সহজ উপায় প্রসারিতযোগ্যতা)।

সংযোজন: একদিকে বৃহত্তর JSON ফাইলগুলি প্রক্রিয়াকরণ করতে jq ব্যবহার করা এবং অন্যদিকে খুব বড় জেকিউ প্রোগ্রাম থাকার বিষয়ে মন্তব্যগুলিতে কিছু বিভ্রান্তি রয়েছে। একক বৃহত JSON সত্তা সমন্বিত একটি ফাইল সুন্দর-মুদ্রণের জন্য ব্যবহারিক সীমাবদ্ধতাটি র‌্যাম। রিয়েল-ওয়ার্ল্ড ডেটাগুলির একক অ্যারে সমন্বিত 2 জিবি ফাইলটি প্রিন্ট-প্রিন্টিংয়ের জন্য, প্রিটি-প্রিন্টিংয়ের জন্য প্রয়োজনীয় "সর্বাধিক আবাসিক সেট আকার" 5 জিবি (জেউ 1.5 বা 1.6 ব্যবহার করা হোক না) ছিল। এছাড়াও নোট করুন যে জিকিউটি পাইথনের পরে ব্যবহার করা যেতে পারে pip install jq


4
জিকিউ দুর্দান্ত তবে একটি সীমাবদ্ধতা রয়েছে তাই এটি বড় ফাইলগুলির জন্য অকেজো। (উদাহরণস্বরূপ, একটি 1.15mb ফাইল হ্যান্ডেল আপ উড়িয়ে দেয়) github.com/stedolan/jq/issues/1041
ক্রিস ম্যাককি

3
হ্যাঁ, মানুষ, অবশ্যই আপনি যদি 10K এর বেশি কোডের লাইনের সাথে জেকি ফিল্টার লেখেন তবে আমি মনে করি আপনি সাইকেলের সাথে মার্সে যাওয়ার মতো কিছু চেষ্টা করছেন।
গিসমো রানাস

2
lol: D @ gismo-ranas json.tool সংস্করণ কোনও ফাইলে পাইপ দেওয়া হয়েছে বড় ফাইলগুলিতে সত্যিই ভাল কাজ করে; এবং বোকামি দ্রুত। আমি জিকিউ পছন্দ করি তবে একটি ছোট পেওলডের বাইরে যে কোনও কিছু ফর্ম্যাট করা (যা আপনি বেশিরভাগ টেক্সট এডিটরগুলিতে করতে পারেন) এটি তার নাগালের বাইরে :) এলোমেলো সংযোজন: json-generator.com পরীক্ষার ডেটা তৈরির জন্য একটি ঝরঝরে সরঞ্জাম
ক্রিস ম্যাককি

5
বা ঠিক:jq '' < some.json
মারাত্মক_অরর

2
প্রকৃতপক্ষে আমি দৃ strongly়ভাবে ব্যবহার করার পরামর্শ দিচ্ছি python3 -m json.tool <IN >OUT, কারণ এটি জেএসওন ডিক্টে ক্ষেত্রগুলির মূল ক্রম বজায় রাখে। পাইথন ইন্টারপ্রেটার সংস্করণ 2 ক্ষেত্রগুলি বর্ণানুক্রমিকভাবে আরোহণের ক্রম অনুসারে সাজায়, যা প্রায়শই হয় না, আপনি কী চান।
কাই পেটজকে

55

আপনি বিল্ট-ইন মডিউল প্রিন্ট ব্যবহার করতে পারেন (https://docs.python.org/3.6/library/pppr.html)

আপনি জসন ডেটা সহ ফাইলটি কীভাবে পড়তে এবং মুদ্রণ করতে পারেন।

import json
import pprint

json_data = None
with open('filename.txt', 'r') as f:
    data = f.read()
    json_data = json.loads(data)

pprint.pprint(json_data)

4
এটির সাথে সমস্যা হ'ল পিপ্রিন্ট একক এবং ডাবল উদ্ধৃতি আন্তঃব্যক্তভাবে ব্যবহার করবে তবে জসন কেবলমাত্র ডাবল উদ্ধৃতি প্রয়োজন, সুতরাং আপনার পি-প্রিন্টড জসন আর বৈধ জসন হিসাবে পার্স করতে পারবেন না।
ড্রিভিকো

1
হ্যাঁ, তবে এটি কেবল কোনও জসন ফাইল আউটপুট করার জন্য। আউটপুট নিতে এবং এটি একটি ফাইলে আবার লিখতে হবে না।
ইক্রেব

52

পাইগম্যানটিজ + পাইথন json.tool = সিনট্যাক্স হাইলাইটিংয়ের সাথে দুর্দান্ত মুদ্রণ

পিগমেটিজ হ'ল একটি হত্যাকারী সরঞ্জাম। এটা দেখ.

আমি পাইগম্যানটিজের সাথে পাইথন জসন.টুল একত্রিত করি

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

পাইগমেনটিজ ইনস্টলেশন নির্দেশের জন্য উপরের লিঙ্কটি দেখুন।

এর একটি ডেমো নীচের চিত্রটিতে রয়েছে:

ডেমো


1
আপনার উদাহরণে -gআসলে কাজ করা হয় না;) যেহেতু ইনপুট স্টিডিন থেকে আসে তাই পাইগম্যানটিজ ভাল অনুমান করতে সক্ষম হয় না। আপনাকে স্পষ্টভাবে লেক্সার নির্দিষ্ট করতে হবে:echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
ডেনিস দ্য মেনেস

1
@DenisTheMenace আমি যখন এই উদাহরণটি তৈরি করেছি তখন এটি কাজ করে। এটি এখন আমার সিস্টেমেও কাজ করছে বলে মনে হয় না।
শুভম চৌধুরী চৌধুরী

36

এই ফাংশন ব্যবহার করুন এবং যদি আপনার তাদেরকে JSON একটি মনে রাখার ঘাম না strবা dictআবার - প্রশংসনীয় মুদ্রণ এ শুধু চেহারা:

import json

def pp_json(json_thing, sort=True, indents=4):
    if type(json_thing) is str:
        print(json.dumps(json.loads(json_thing), sort_keys=sort, indent=indents))
    else:
        print(json.dumps(json_thing, sort_keys=sort, indent=indents))
    return None

pp_json(your_json_string_or_dict)

14

আমি একবার prettyjson()সুন্দর চেহারার আউটপুট উত্পাদন একটি ফাংশন লিখেছি । আপনি এই রেপো থেকে বাস্তবায়ন দখল করতে পারেন ।

এই ফাংশনের প্রধান বৈশিষ্ট্যটি হ'ল এটি নির্দিষ্ট হওয়া অবধি অবধি ডিক এবং আইটেমগুলিকে এক লাইনে রাখার চেষ্টা করে maxlinelength। এটি JSON এর কম লাইন তৈরি করে, আউটপুট আরও কমপ্যাক্ট এবং পড়তে সহজ দেখায়।

আপনি উদাহরণস্বরূপ এই ধরণের আউটপুট উত্পাদন করতে পারেন:

{
  "grid": {"port": "COM5"},
  "policy": {
    "movingaverage": 5,
    "hysteresis": 5,
    "fan1": {
      "name": "CPU",
      "signal": "cpu",
      "mode": "auto",
      "speed": 100,
      "curve": [[0, 75], [50, 75], [75, 100]]
    }
}

ইউপিডি ডিসেম্বর ১৯: আমি কোডটি একটি আলাদা রেপোতে রেখেছি , কয়েকটি বাগ সংশোধন করেছি এবং আরও কয়েকটি টুইট করেছি।


আমি এই ফর্ম্যাটরটিকে প্রস্তাবিতগুলির থেকে সেরা হিসাবে বিবেচনা করি, আরও উত্সাহের দাবি রাখে।
thorhunter

13

কমান্ড লাইন থেকে চমত্কারভাবে মুদ্রণ করতে সক্ষম হবেন এবং ইনডেন্টেশন ইত্যাদির উপর নিয়ন্ত্রণ রাখতে সক্ষম হবেন আপনি এর অনুরূপ একটি উপমা সেটআপ করতে পারেন:

alias jsonpp="python -c 'import sys, json; print json.dumps(json.load(sys.stdin), sort_keys=True, indent=2)'"

এবং তারপরে এই উপায়ে একটি ব্যবহার করুন:

cat myfile.json | jsonpp
jsonpp < myfile.json

11

প্রিন্ট ব্যবহার করুন: https://docs.python.org/3.6/library/ppint.html

import pprint
pprint.pprint(json)

print() তুলনা করা pprint.pprint()

print(json)
{'feed': {'title': 'W3Schools Home Page', 'title_detail': {'type': 'text/plain', 'language': None, 'base': '', 'value': 'W3Schools Home Page'}, 'links': [{'rel': 'alternate', 'type': 'text/html', 'href': 'https://www.w3schools.com'}], 'link': 'https://www.w3schools.com', 'subtitle': 'Free web building tutorials', 'subtitle_detail': {'type': 'text/html', 'language': None, 'base': '', 'value': 'Free web building tutorials'}}, 'entries': [], 'bozo': 0, 'encoding': 'utf-8', 'version': 'rss20', 'namespaces': {}}

pprint.pprint(json)
{'bozo': 0,
 'encoding': 'utf-8',
 'entries': [],
 'feed': {'link': 'https://www.w3schools.com',
          'links': [{'href': 'https://www.w3schools.com',
                     'rel': 'alternate',
                     'type': 'text/html'}],
          'subtitle': 'Free web building tutorials',
          'subtitle_detail': {'base': '',
                              'language': None,
                              'type': 'text/html',
                              'value': 'Free web building tutorials'},
          'title': 'W3Schools Home Page',
          'title_detail': {'base': '',
                           'language': None,
                           'type': 'text/plain',
                           'value': 'W3Schools Home Page'}},
 'namespaces': {},
 'version': 'rss20'}

pprintএকটি বৈধ JSON নথি তৈরি করে না।
সেলুর্বেদু

5

পাইথনের একটি দুর্দান্ত উপায়ে কনসোলটিতে JSON কে প্রিন্টিংয়ের একটি সাধারণ উদাহরণ, স্থানীয় ফাইল হিসাবে আপনার কম্পিউটারে জেএসএন প্রয়োজন হয় না:

import pprint
import json 
from urllib.request import urlopen # (Only used to get this example)

# Getting a JSON example for this example 
r = urlopen("https://mdn.github.io/fetch-examples/fetch-json/products.json")
text = r.read() 

# To print it
pprint.pprint(json.loads(text))

পাইথন 3-এ আমি নিম্নলিখিত ত্রুটি বার্তাটি পেয়েছি: "টাইপ এরির: জেএসওএন অবজেক্ট অবশ্যই 'বাইটস' নয়," স্ট্রোকড "হতে হবে
মিঃ টি


1

আমি মনে করি ত্রুটিগুলি এড়ানোর জন্য জাসনকে আগে পার্স করা ভাল:

def format_response(response):
    try:
        parsed = json.loads(response.text)
    except JSONDecodeError:
        return response.text
    return json.dumps(parsed, ensure_ascii=True, indent=4)

1

আপনি প্রিন্টজসন চেষ্টা করতে পারেন


স্থাপন

$ pip3 install pprintjson

ব্যবহার

পিপ্রিন্টজসন সিএলআই ব্যবহার করে একটি ফাইল থেকে প্রিন্ট জেএসএন প্রিন্ট করুন।

$ pprintjson "./path/to/file.json"

পিপ্রিন্টজসন সিএলআই ব্যবহার করে স্ট্যান্ডিন থেকে প্রিন্ট জেএসএন প্রিন্ট করুন।

$ echo '{ "a": 1, "b": "string", "c": true }' | pprintjson

পিপ্রিন্টজসন সিএলআই ব্যবহার করে একটি স্ট্রিং থেকে খুব সুন্দর জেএসএন প্রিন্ট করুন।

$ pprintjson -c '{ "a": 1, "b": "string", "c": true }'

1 এর ইনডেন্ট সহ একটি স্ট্রিং থেকে প্রিন্ট জেএসএন প্রিন্ট করুন।

$ pprintjson -c '{ "a": 1, "b": "string", "c": true }' -i 1

বেশ একটি স্ট্রিং থেকে JSON মুদ্রণ করুন এবং একটি ফাইল আউটপুট.জসনে আউটপুট সংরক্ষণ করুন।

$ pprintjson -c '{ "a": 1, "b": "string", "c": true }' -o ./output.json

আউটপুট

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


0

এটি নিখুঁত থেকে অনেক দূরে, তবে এটি কাজটি করে।

data = data.replace(',"',',\n"')

আপনি এটিকে উন্নত করতে পারেন, ইনডেন্টিং যোগ করতে পারেন ইত্যাদি,

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