python - كيفية طبع ملف JSON؟




pretty-print (7)

لتكون قادرة على طباعة جميلة من سطر الأوامر وتكون قادراً على التحكم في المسافة البادئة إلخ. يمكنك إعداد اسم مستعار مشابه لهذا:

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

لدي ملف JSON عبارة عن فوضى أريد أن أجملها - ما أسهل طريقة للقيام بذلك في python؟ أعلم أن PrettyPrint تأخذ "كائن" ، والذي أعتقد أنه يمكن أن يكون ملفًا ، لكنني لا أعرف كيفية تمرير ملف - فقط لا يعمل اسم الملف.


إليك مثال بسيط على الطباعة الجميلة لـ JSON إلى وحدة التحكم بطريقة لطيفة في Python ، دون الحاجة إلى وجود 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))

يمكنك القيام بذلك على سطر الأوامر:

cat some.json | python -m json.tool

(كما سبق ذكره في التعليقات على السؤال).

في الواقع بيثون ليست أداتي المفضلة بقدر ما تشعر بالقلق مع معالجة جونسون على سطر الأوامر. لطباعة جميلة بسيطة على ما يرام ، ولكن إذا كنت تريد التلاعب في json يمكن أن تصبح أكثر تعقيدا. ستحتاج قريبًا إلى كتابة ملف نصي منفصل ، فقد ينتهي بك الأمر إلى الخرائط التي تكون مفاتيحها "مفتاحًا" (python unicode) ، مما يجعل اختيار الحقول أكثر صعوبة ولا يسير في اتجاه جميل -printing.

أنا استخدم jq . ما سبق يمكن القيام به مع:

cat some.json | jq ''

وتحصل على ألوان كمكافأة (وإمكانية تمديد أسهل).


استخدم هذه الوظيفة ولا يجب عليك التذكر إذا كان 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)

يمكنك استخدام pprint .

كيفية قراءة الملف مع بيانات json وطباعته.

import json
import pprint

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

pprint.pprint(json_data)

تقوم وحدة json بالفعل بتنفيذ بعض الطباعة الأساسية 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)

تحقق من الوثائق لمعرفة كيفية عمل الديكور. إليك ما طلبت:

def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makebold
@makeitalic
def hello():
    return "hello world"

print hello() ## returns "<b><i>hello world</i></b>"




python json pretty-print