Python JSON: التشفير (مقالب)، فك التشفير (التحميلات) وقراءة ملف JSON
ما هو JSON فيه Python?
JSON in Python هو تنسيق قياسي مستوحى من Javaبرنامج نصي لتبادل البيانات ونقلها بتنسيق نصي عبر شبكة. بشكل عام، يكون JSON بتنسيق نصي أو نصي. ويمكن استخدامه بواسطة واجهات برمجة التطبيقات وقواعد البيانات، ويمثل الكائنات كأزواج اسم/قيمة. JSON تعني Javaتدوين كائن النص.
Python بناء جملة جسون:
تتم كتابة JSON كزوج المفتاح والقيمة.
{
"Key": "Value",
"Key": "Value",
}
JSON مشابه جدًا لـ Python قاموس. Python يدعم JSON، ويحتوي على مكتبة يحمل في ثناياه عوامل مثل JSON.
مكتبة JSON في Python
'مارشال'و'ورطة' الوحدات الخارجية Python الحفاظ على نسخة من JSON Python مكتبة. العمل مع JSON في Python لإجراء عمليات متعلقة بـ JSON مثل الترميز وفك التشفير، تحتاج أولاً إلى استيراد مكتبة JSON ولهذا في ملفك .py ملف،
import json
الطرق التالية متاحة في JSON Python وحدة
| الأسلوب | الوصف |
|---|---|
| مقالب () | الترميز إلى كائنات JSON |
| أحمق() | كتابة سلسلة مشفرة على الملف |
| الأحمال () | فك تشفير سلسلة JSON |
| حمل() | فك التشفير أثناء قراءة ملف JSON |
Python إلى JSON (الترميز)
JSON مكتبة Python يقوم بالترجمة التالية Python الكائنات إلى كائنات JSON بشكل افتراضي
| Python | JSON |
|---|---|
| ديكت | هدف |
| الإدارية | مجموعة |
| يونيكود | خيط |
| رقم - كثافة العمليات، طويلة | الرقم - كثافة العمليات |
| الطفو | رقم - حقيقي |
| صواب | صواب |
| خطأ | خطأ |
| بدون سلوفان | فارغة |
التحول Python تُسمى عملية تحويل البيانات إلى JSON بعملية الترميز. تتم عملية الترميز بمساعدة طريقة مكتبة JSON - مقالب ()
مقالب JSON () في Python
json.dumps () in Python هي طريقة تقوم بتحويل كائنات القاموس Python إلى تنسيق بيانات سلسلة JSON. يكون ذلك مفيدًا عندما تكون الكائنات مطلوبة بتنسيق سلسلة لعمليات مثل التحليل والطباعة وما إلى ذلك.
الآن دعونا نقوم بتنفيذ أول مثال لترميز json.dumps باستخدام Python:
import json
x = {
"name": "Ken",
"age": 45,
"married": True,
"children": ("Alice","Bob"),
"pets": ['Dog'],
"cars": [
{"model": "Audi A1", "mpg": 15.1},
{"model": "Zeep Compass", "mpg": 18.1}
]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
الإخراج:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
دعونا نرى مثالا على ذلك Python اكتب JSON إلى ملف لإنشاء ملف JSON من القاموس باستخدام نفس الوظيفة أحمق()
# here we create new data_file.json file with write mode using file i/o operation
with open('json_file.json', "w") as file_write:
# write json data into file
json.dump(person_data, file_write)
الإخراج:
لا يوجد شيء لإظهاره... تم إنشاء json_file.json في نظامك. يمكنك التحقق من هذا الملف كما هو موضح في كتابة JSON أدناه إلى الملف Python مثال.
جيسون ل Python (فك التشفير)
يتم فك تشفير سلسلة JSON بمساعدة الطريقة المدمجة json.loads () & json.load() مكتبة JSON في Python. يعرض جدول الترجمة هنا مثالاً لكائنات JSON Python الأجسام والتي تساعد في تنفيذ فك التشفير Python من سلسلة JSON.
| JSON | Python |
|---|---|
| هدف | ديكت |
| مجموعة | الإدارية |
| خيط | يونيكود |
| الرقم - كثافة العمليات | رقم - كثافة العمليات، طويلة |
| رقم - حقيقي | الطفو |
| صواب | صواب |
| خطأ | خطأ |
| فارغة | بدون سلوفان |
دعونا نرى تحليل JSON الأساسي Python مثال على فك التشفير بمساعدة json.loads وظيفة،
import json # json library imported
# json data string
person_data = '{ "person": { "name": "Kenn", "sex": "male", "age": 28}}'
# Decoding or converting JSON format in dictionary using loads()
dict_obj = json.loads(person_data)
print(dict_obj)
# check type of dict_obj
print("Type of dict_obj", type(dict_obj))
# get human object details
print("Person......", dict_obj.get('person'))
الإخراج:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}
فك تشفير ملف JSON أو تحليل ملف JSON في Python
الآن، سوف نتعلم كيفية قراءة ملف JSON في Python مع Python تحليل مثال JSON:
NOTE: فك تشفير ملف JSON هو عملية مرتبطة بإدخال/إخراج الملف (I/O). يجب أن يكون ملف JSON موجودًا على نظامك في الموقع المحدد الذي ذكرته في برنامجك.
Python قراءة ملف JSON مثال:
import json
#File I/O Open function for read data from JSON File
with open('X:/json_file.json') as file_object:
# store file data in object
data = json.load(file_object)
print(data)
هنا البيانات هو كائن القاموس Python كما هو موضح في ملف JSON للقراءة أعلاه Python مثال.
الإخراج:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
ترميز مدمج في Python
عندما تحتاج إلى تقليل حجم ملف JSON الخاص بك، يمكنك استخدام التشفير المضغوط Python.
سبيل المثال،
import json
# Create a List that contains dictionary
lst = ['a', 'b', 'c',{'4': 5, '6': 7}]
# separator used for compact representation of JSON.
# Use of ',' to identify list items
# Use of ':' to identify key and value in dictionary
compact_obj = json.dumps(lst, separators=(',', ':'))
print(compact_obj)
الإخراج:
'["a", "b", "c", {"4": 5, "6": 7}]'
** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj **
تنسيق رمز JSON (طباعة جميلة)
- الهدف هو كتابة تعليمات برمجية جيدة التنسيق لفهم الإنسان. بمساعدة الطباعة الجميلة، يمكن لأي شخص فهم الكود بسهولة.
على سبيل المثال:
import json
dic = { 'a': 4, 'b': 5 }
''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. '''
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': '))
print(formatted_obj)
الإخراج:
{
"a" : 4,
"b" : 5
}
لفهم ذلك بشكل أفضل، قم بتغيير المسافة البادئة إلى 40 ولاحظ الإخراج-
طلب رمز JSON:
ترتيب_المفاتيح السمة في Python ستقوم وسيطة الدالة dumps بفرز المفتاح في JSON بترتيب تصاعدي. وسيطة sort_keys هي سمة منطقية. عندما تكون صحيحة، يُسمح بالفرز وإلا فلا. دعنا نفهم ذلك Python سلسلة إلى مثال فرز JSON.
سبيل المثال،
import json
x = {
"name": "Ken",
"age": 45,
"married": True,
"children": ("Alice", "Bob"),
"pets": [ 'Dog' ],
"cars": [
{"model": "Audi A1", "mpg": 15.1},
{"model": "Zeep Compass", "mpg": 18.1}
],
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
الإخراج:
{
"age": 45,
"cars": [ {
"model": "Audi A1",
"mpg": 15.1
},
{
"model": "Zeep Compass",
"mpg": 18.1
}
],
"children": [ "Alice",
"Bob"
],
"married": true,
"name": "Ken",
"pets": [
"Dog"
]
}
كما يمكنك ملاحظة عمر المفاتيح، يتم ترتيب السيارات والأطفال وما إلى ذلك بترتيب تصاعدي.
ترميز الكائنات المعقدة Python
يتكون الكائن المعقد من جزأين مختلفين هما
- الجزء الحقيقي
- الجزء الخيالي
مثال: 3 +2i
قبل إجراء ترميز لكائن معقد، تحتاج إلى التحقق من كون المتغير معقدًا أم لا. تحتاج إلى إنشاء دالة تتحقق من القيمة المخزنة في متغير باستخدام طريقة مثيل.
لنقم بإنشاء وظيفة محددة للتحقق من أن الكائن معقد أو مؤهل للترميز.
import json
# create function to check instance is complex or not
def complex_encode(object):
# check using isinstance method
if isinstance(object, complex):
return [object.real, object.imag]
# raised error using exception handling if object is not complex
raise TypeError(repr(object) + " is not JSON serialized")
# perform json encoding by passing parameter
complex_obj = json.dumps(4 + 5j, default=complex_encode)
print(complex_obj)
الإخراج:
'[4.0, 5.0]'
فك تشفير كائنات JSON المعقدة في Python
لفك تشفير كائن معقد في JSON، استخدم معلمة object_hook التي تتحقق مما إذا كانت سلسلة JSON تحتوي على الكائن المعقد أم لا. دعنا نفهم كيفية تحويل السلسلة إلى JSON Python سبيل المثال،
import json
# function check JSON string contains complex object
def is_complex(objct):
if '__complex__' in objct:
return complex(objct['real'], objct['img'])
return objct
# use of json loads method with object_hook for check object complex or not
complex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)
#here we not passed complex object so it's convert into dictionary
simple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)
print("Complex_object......",complex_object)
print("Without_complex_object......",simple_object)
الإخراج:
Complex_object...... (4+5j)
Without_complex_object...... {'real': 6, 'img': 7}
نظرة عامة على فئة تسلسل JSON JSONEncoder
يتم استخدام فئة JSONEncoder لتسلسل أي منها Python كائن أثناء تنفيذ الترميز. يحتوي على ثلاث طرق مختلفة للتشفير وهي
- الافتراضي (س) - تم تنفيذه في الفئة الفرعية وإرجاع كائن التسلسل لـ o موضوع.
- ترميز (س) - نفس مقالب JSON Python طريقة إرجاع سلسلة JSON من Python هيكل البيانات.
- iterencode(س) – تمثيل السلسلة واحدة تلو الأخرى وتشفير الكائن o.
بمساعدة طريقة encode() لفئة JSONEncoder، يمكننا أيضًا تشفير أي منها Python الكائن كما هو موضح أدناه Python مثال على التشفير JSON
# import JSONEncoder class from json
from json.encoder import JSONEncoder
colour_dict = { "colour": ["red", "yellow", "green" ]}
# directly called encode method of JSON
JSONEncoder().encode(colour_dict)
الإخراج:
'{"colour": ["red", "yellow", "green"]}'
نظرة عامة على فئة إلغاء تسلسل JSON JSONDecoder
يتم استخدام فئة JSONDecoder لإلغاء تسلسل أي منها Python كائن أثناء تنفيذ فك التشفير. يحتوي على ثلاث طرق مختلفة لفك التشفير وهي
- الافتراضي (س) - تم تنفيذه في الفئة الفرعية وإرجاع كائن تم إلغاء تسلسله o موضوع.
- فك التشفير (س) - نفس طريقة إرجاع طريقة json.loads() Python بنية بيانات سلسلة JSON أو البيانات.
- Raw_decode(س) - يمثل Python القاموس واحدًا تلو الآخر وفك تشفير الكائن o.
بمساعدة طريقة decode() لفئة JSONDecoder، يمكننا أيضًا فك تشفير سلسلة JSON كما هو موضح أدناه Python مثال على وحدة فك ترميز JSON.
import json
# import JSONDecoder class from json
from json.decoder import JSONDecoder
colour_string = '{ "colour": ["red", "yellow"]}'
# directly called decode method of JSON
JSONDecoder().decode(colour_string)
الإخراج:
{'colour': ['red', 'yellow']}
فك تشفير بيانات JSON من عنوان URL: مثال واقعي
سنقوم بجلب بيانات CityBike NYC (نظام مشاركة الدراجة) من عنوان URL المحدد (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) وتحويلها إلى تنسيق القاموس.
Python تحميل JSON من ملف مثال:
ملاحظة: - تأكد من أن مكتبة الطلبات مثبتة بالفعل في جهازك Pythonإذا لم يكن الأمر كذلك، فافتح Terminal أو CMD واكتب
- (إلى عن على Python 3 أو أعلى) طلبات تثبيت pip3
import json
import requests
# get JSON string data from CityBike NYC using web requests library
json_response= requests.get("https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json")
# check type of json_response object
print(type(json_response.text))
# load data in loads() function of json library
bike_dict = json.loads(json_response.text)
#check type of news_dict
print(type(bike_dict))
# now get stationBeanList key data from dict
print(bike_dict['stationBeanList'][0])
الإخراج:
<class 'str'>
<class 'dict'>
{
'id': 487,
'stationName': 'E 20 St & FDR Drive',
'availableDocks': 24,
'totalDocks': 34,
'latitude': 40.73314259,
'longitude': -73.97573881,
'statusValue': 'In Service',
'statusKey': 1,
'availableBikes': 9,
'stAddress1': 'E 20 St & FDR Drive',
'stAddress2': '',
'city': '',
'postalCode': '',
'location': '',
'altitude': '',
'testStation': False,
'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': ''
}
الاستثناءات المتعلقة بمكتبة JSON في Python:
- الفئه json.JSONDecoderError يعالج الاستثناء المتعلق بعملية فك التشفير. وهو فئة فرعية من خطأ القيمة.
- استثناء - json.JSONDecoderError(msg, doc)
- معلمات الاستثناء هي،
- msg - رسالة خطأ غير منسقة
- doc - تم تحليل مستندات JSON
- pos - بدء فهرس المستند عند فشله
- Lineno - السطر الذي لا يظهر يتوافق مع نقاط البيع
- النقطتان - العمود لا يتوافق مع نقاط البيع
Python تحميل JSON من ملف مثال:
import json
#File I/O Open function for read data from JSON File
data = {} #Define Empty Dictionary Object
try:
with open('json_file_name.json') as file_object:
data = json.load(file_object)
except ValueError:
print("Bad JSON file format, Change JSON File")
لانهائي وNaN Numbers in Python
لا يسمح تنسيق تبادل بيانات JSON (RFC - طلب التعليقات) بالقيمة اللانهائية أو Nan ولكن لا يوجد أي قيود في Python- مكتبة JSON لإجراء عمليات متعلقة بالقيمة اللانهائية والقيمة غير المحدودة. إذا حصل JSON على نوع بيانات لانهائي وقيمة غير محدودة، فسيتم تحويله إلى قيمة حرفية.
سبيل المثال،
import json
# pass float Infinite value
infinite_json = json.dumps(float('inf'))
# check infinite json type
print(infinite_json)
print(type(infinite_json))
json_nan = json.dumps(float('nan'))
print(json_nan)
# pass json_string as Infinity
infinite = json.loads('Infinity')
print(infinite)
# check type of Infinity
print(type(infinite))
الإخراج:
Infinity <class 'str'> NaN inf <class 'float'>
المفتاح المتكرر في سلسلة JSON
يحدد RFC أن اسم المفتاح يجب أن يكون فريدًا في كائن JSON، ولكنه ليس إلزاميًا. Python لا تقوم مكتبة JSON برفع استثناء للكائنات المتكررة في JSON. إنه يتجاهل جميع أزواج القيمة الرئيسية المتكررة ويأخذ في الاعتبار زوج القيمة الرئيسية الأخير فقط فيما بينها.
- سبيل المثال،
import json
repeat_pair = '{"a": 1, "a": 2, "a": 3}'
json.loads(repeat_pair)
الإخراج:
{'a': 3}
CLI (واجهة سطر الأوامر) مع JSON in Python
json.tool يوفر واجهة سطر الأوامر للتحقق من صحة بناء جملة JSON الجميلة. دعونا نرى مثالاً على CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
الإخراج:
{
"name": " Kings Authur "
}
مزايا JSON في Python
- من السهل الرجوع بين الحاوية والقيمة (JSON to Python و Python إلى JSON)
- كائن JSON قابل للقراءة من قبل البشر (طباعة جميلة)
- تستخدم على نطاق واسع في معالجة البيانات.
- لا يحتوي على نفس بنية البيانات في الملف الواحد.
قيود تنفيذ JSON في Python
- في إلغاء تسلسل نطاق JSON والتنبؤ برقم
- الحد الأقصى لطول سلسلة JSON ومصفوفات JSON ومستويات تداخل الكائن.
Python ورقة الغش JSON
| Python وظيفة جيسون | الوصف |
|---|---|
| json.dumps(person_data) | إنشاء كائن JSON |
| json.dump(person_data, file_write) | قم بإنشاء ملف JSON باستخدام ملف I/O of Python |
| Compact_obj = json.dumps(data, separators=(',',':')) | ضغط كائن JSON عن طريق إزالة حرف المسافة من كائن JSON باستخدام الفاصل |
| formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | تنسيق كود JSON باستخدام المسافة البادئة |
| sorted_string = json.dumps(x, indent=4,sort_keys=True) | فرز مفتاح كائن JSON حسب الترتيب الأبجدي |
| complex_obj = json.dumps(4 + 5j، الافتراضي=complex_encode) | Python ترميز الكائنات المعقدة في JSON |
| JSONEncoder().encode(colour_dict) | استخدام فئة JSONEncoder للتسلسل |
| json.loads(data_string) | فك تشفير سلسلة JSON في Python القاموس باستخدام الدالة json.loads() |
| json.loads('{“__complex__”: صحيح، “حقيقي”: 4، “img”: 5}'، object_hook = is_complex) | فك تشفير كائن JSON المعقد إلى Python |
| JSONDecoder().decode(colour_string) | استخدام فك تشفير JSON ل Python مع إلغاء التسلسل |








