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

جيسون ل 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'}

Python مثال فك تشفير JSON

فك تشفير ملف 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}}

تحليل ملف JSON في Python

ترميز مدمج في 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
}

مثال على تنسيق رمز JSON

لفهم ذلك بشكل أفضل، قم بتغيير المسافة البادئة إلى 40 ولاحظ الإخراج-

مثال على تنسيق رمز JSON

طلب رمز 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

يتكون الكائن المعقد من جزأين مختلفين هما

  1. الجزء الحقيقي
  2. الجزء الخيالي

ترميز الكائنات المعقدة 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")

مكتبة JSON في Python

لانهائي و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

واجهة سطر الأوامر مع JSON

$ 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 مع إلغاء التسلسل

تلخيص هذه التدوينة بـ: