بايثون3 مِن مدارس w3-32Python JSON
اقتبس من ابراهيم حمادة في 23 مايو، 2021, 12:31 متنويه:
لِأن التاب لا تظهر على الصفحة, و هي شيء مهم جدا في الإزاحة في كود بايثون
لذلك فإننا سنستبدل التاب بالكلمة 'tab' على هذه الصفحة
و مِن الأفضل إذا شئت أن تنسخ أي كود, أن تأخذه مِن الملف النصي, أو الملفات المُرفقة.
استخدام JSON في بايثونJSON هو أسلوب يستخدم لتخزين البيانات وتبادلها.
JSON هو نص, يُكتب باستخدام تدوين كائن جافا سكريبت(JavaScript object notation).JSON في بايثون
يحتوي Python على حزمة مدمجة(built-in package ) تسمى json، والتي يمكن استخدامها للعمل مع بيانات JSON.
مثال
استيراد وحدة json:
import jsonتحليل JSON - التحويل من JSON إلى Python
إذا كانت لديك سلسلة JSON ، فيمكنك تحليلها و تحويلها إلى بايثون باستخدام الوظيفة json.loads().
والنتيجة ستكون قاموس مِن قواميس بيثون.
مثال
التحويل من JSON إلى Python:
import json# some JSON:
x = '{ "name":"John", "age":30, "city":"New York"}'# parse x:
y = json.loads(x)# the result is a Python dictionary:
print(y["age"])ستكون النتيجة:
30
جربها بنفسك مِن ملف json.pyالتحويل من Python إلى JSON
إذا كان لديك كائن Python ، فيمكنك تحويله إلى سلسلة JSON باستخدام الوظيفة json.dumps().
مثال
التحويل من Python إلى JSON:
import json# a Python object (dict):
x = {
"name": "John",
"age": 30,
"city": "New York"
}# convert into JSON:
y = json.dumps(x)# the result is a JSON string:
print(y)ستكون النتيجة:
{"name": "John", "age": 30, "city": "New York"}
جربها بنفسك مِن ملف json_from_python.py
ملحوظة: النتيجة هي سلسلة نصِّيَّة, لكن علامات التنصيص لا تظهر عند طباعتها.يمكنك تحويل كائنات Python من الأنواع التالية ، إلى سلاسل JSON:
• قاموس dict
• قائمة list
• مصفوفة tuple
• سلسلة نصيَّة str
• الرقم الصحيح int
• الرقم العائم float
• القيمة المنطقية True
• القيمة المنطقية False
• القيمة Noneمثال
تحويل كائنات Python إلى سلاسل JSON ، وطباعة القيم:
import jsonprint(json.dumps({"name": "John", "age": 30}))
print(json.dumps(["apple", "bananas"]))
print(json.dumps(("apple", "bananas")))
print(json.dumps("hello"))
print(json.dumps(42))
print(json.dumps(31.76))
print(json.dumps(True))
print(json.dumps(False))
print(json.dumps(None))ستكون النتيجة:
{"name": "John", "age": 30}
["apple", "bananas"]
["apple", "bananas"]
"hello"
42
31.76
true
false
null
جربها بنفسك مِن ملف json_from_python_all.pyعندما تقوم بالتحويل من Python إلى JSON ، يتم تحويل كائنات Python إلى مكافئ JSON لها في جافا سكريبت(JavaScript):
dict
المكافئ لها
Object
list
المكافئ لها
Array
tuple
المكافئ لها
Array
str
المكافئ لها
String
int
المكافئ لها
Number
float
المكافئ لها
Number
True
المكافئ لها
true
False
المكافئ لها
false
None
المكافئ لها
nullمثال
تحويل كائن Python يحتوي على كافة أنواع البيانات القانونية:
import jsonx = {
"name": "John",
"age": 30,
"married": True,
"divorced": False,
"children": ("Ann","Billy"),
"pets": None,
"cars": [
{"model": "BMW 230", "mpg": 27.5},
{"model": "Ford Edge", "mpg": 24.1}
]
}print(json.dumps(x))
ستكون النتيجة:
{"name": "John", "age": 30, "married": true, "divorced": false, "children": ["Ann", "Billy"], "pets": null, "cars": [{"model": "BMW 230", "mpg": 27.5}, {"model": "Ford Edge", "mpg": 24.1}]}
جربها بنفسك مِن ملف json_from_python_all_in_one.pyتنسيق النتيجة
المثال أعلاه يَطْبع سلسلة JSON ، لكن ليس من السهل قراءتها ، بدون مسافات بادئة أو إزاحة وفواصل أَسْطُر.
تحتوي الوظيفة json.dumps() على مُعامِلات لتسهيل قراءة النتيجة:
مثال
استخدم المعامِل indent لتحديد عدد الإزاحات أو المسافات البادئة:
import jsonx = {
tab "name": "John",
tab "age": 30,
tab "married": True,
tab "divorced": False,
tab "children": ("Ann","Billy"),
tab "pets": None,
tab "cars": [
tab tab {"model": "BMW 230", "mpg": 27.5},
tab tab {"model": "Ford Edge", "mpg": 24.1}
tab ]
}# use four indents to make it easier to read the result:
print(json.dumps(x, indent=4))ستكون النتيجة:
{
tab tab "name": "John",
tab tab "age": 30,
tab tab "married": true,
tab tab "divorced": false,
tab tab "children": [
tab tab tab tab "Ann",
tab tab tab tab "Billy"
tab tab ],
tab tab "pets": null,
tab tab "cars": [
tab tab tab tab {
tab tab tab tab tab tab "model": "BMW 230",
tab tab tab tab tab tab "mpg": 27.5
tab tab tab tab },
tab tab tab tab {
tab tab tab tab tab tab "model": "Ford Edge",
tab tab tab tab tab tab "mpg": 24.1
tab tab tab tab }
tab tab ]
}جربها بنفسك مِن ملف json_from_python_indent.py
يمكنك أيضًا تحديد الفواصل ، القيمة الافتراضية هي ("،"، ":") ، مما يعني استخدام فاصلة ومسافة لفصل كل كائن ، ونقطتين ومسافة لفصل المفاتيح عن القيم:
مثال
استخدام المعامِل separators لتغيير الفاصل الافتراضي:
import jsonx = {
tab "name": "John",
tab "age": 30,
tab "married": True,
tab "divorced": False,
tab "children": ("Ann","Billy"),
tab "pets": None,
tab "cars": [
tab tab {"model": "BMW 230", "mpg": 27.5},
tab tab {"model": "Ford Edge", "mpg": 24.1}
tab ]
}# use . and a space to separate objects, and a space, a = and a space to separate keys from their values:
print(json.dumps(x, indent=4, separators=(". ", " = ")))ستكون النتيجة:
{
tab tab "name" = "John".
tab tab "age" = 30.
tab tab "married" = true.
tab tab "divorced" = false.
tab tab "children" = [
tab tab tab tab "Ann".
tab tab tab tab "Billy"
tab tab ].
tab tab "pets" = null.
tab tab "cars" = [
tab tab tab tab {
tab tab tab tab tab tab "model" = "BMW 230".
tab tab tab tab tab tab "mpg" = 27.5
tab tab tab tab }.
tab tab tab tab {
tab tab tab tab tab tab "model" = "Ford Edge".
tab tab tab tab tab tab "mpg" = 24.1
tab tab tab tab }
tab tab ]
}
جربها بنفسك مِن ملف json_from_python_separators.pyتنظيم أو ترتيب النتيجة
تحتوي الوظيفة json.dumps() على مُعامِلات لترتيب المفاتيح في النتيجة:
مثال
استخدم المُعامِل sort_keys لتحديد ما إذا كان يجب ترتيب أو فرز(sort) النتيجة أَم لا:
import jsonx = {
tab "name": "John",
tab "age": 30,
tab "married": True,
tab "divorced": False,
tab "children": ("Ann","Billy"),
tab "pets": None,
tab "cars": [
tab tab {"model": "BMW 230", "mpg": 27.5},
tab tab {"model": "Ford Edge", "mpg": 24.1}
tab ]
}# sort the result alphabetically by keys:
print(json.dumps(x, indent=4, sort_keys=True))ستكون النتيجة:
{
tab tab "age": 30,
tab tab "cars": [
tab tab tab tab {
tab tab tab tab tab tab "model": "BMW 230",
tab tab tab tab tab tab "mpg": 27.5
tab tab tab tab },
tab tab tab tab {
tab tab tab tab tab tab "model": "Ford Edge",
tab tab tab tab tab tab "mpg": 24.1
tab tab tab tab }
tab tab ],
tab tab "children": [
tab tab tab tab "Ann",
tab tab tab tab "Billy"
tab tab ],
tab tab "divorced": false,
tab tab "married": true,
tab tab "name": "John",
tab tab "pets": null
}
جربها بنفسك مِن ملف json_from_python_sort_keys.pyالدرس مع الملفات المُرفقة:
https://www.dropbox.com/s/2ydksywwg4o2ntm/32Python%20JSON.zip?dl=1
تنويه:
لِأن التاب لا تظهر على الصفحة, و هي شيء مهم جدا في الإزاحة في كود بايثون
لذلك فإننا سنستبدل التاب بالكلمة 'tab' على هذه الصفحة
و مِن الأفضل إذا شئت أن تنسخ أي كود, أن تأخذه مِن الملف النصي, أو الملفات المُرفقة.
استخدام JSON في بايثون
JSON هو أسلوب يستخدم لتخزين البيانات وتبادلها.
JSON هو نص, يُكتب باستخدام تدوين كائن جافا سكريبت(JavaScript object notation).
JSON في بايثون
يحتوي Python على حزمة مدمجة(built-in package ) تسمى json، والتي يمكن استخدامها للعمل مع بيانات JSON.
مثال
استيراد وحدة json:
import json
تحليل JSON - التحويل من JSON إلى Python
إذا كانت لديك سلسلة JSON ، فيمكنك تحليلها و تحويلها إلى بايثون باستخدام الوظيفة json.loads().
والنتيجة ستكون قاموس مِن قواميس بيثون.
مثال
التحويل من JSON إلى Python:
import json
# some JSON:
x = '{ "name":"John", "age":30, "city":"New York"}'
# parse x:
y = json.loads(x)
# the result is a Python dictionary:
print(y["age"])
ستكون النتيجة:
30
جربها بنفسك مِن ملف json.py
التحويل من Python إلى JSON
إذا كان لديك كائن Python ، فيمكنك تحويله إلى سلسلة JSON باستخدام الوظيفة json.dumps().
مثال
التحويل من Python إلى JSON:
import json
# a Python object (dict):
x = {
"name": "John",
"age": 30,
"city": "New York"
}
# convert into JSON:
y = json.dumps(x)
# the result is a JSON string:
print(y)
ستكون النتيجة:
{"name": "John", "age": 30, "city": "New York"}
جربها بنفسك مِن ملف json_from_python.py
ملحوظة: النتيجة هي سلسلة نصِّيَّة, لكن علامات التنصيص لا تظهر عند طباعتها.
يمكنك تحويل كائنات Python من الأنواع التالية ، إلى سلاسل JSON:
• قاموس dict
• قائمة list
• مصفوفة tuple
• سلسلة نصيَّة str
• الرقم الصحيح int
• الرقم العائم float
• القيمة المنطقية True
• القيمة المنطقية False
• القيمة None
مثال
تحويل كائنات Python إلى سلاسل JSON ، وطباعة القيم:
import json
print(json.dumps({"name": "John", "age": 30}))
print(json.dumps(["apple", "bananas"]))
print(json.dumps(("apple", "bananas")))
print(json.dumps("hello"))
print(json.dumps(42))
print(json.dumps(31.76))
print(json.dumps(True))
print(json.dumps(False))
print(json.dumps(None))
ستكون النتيجة:
{"name": "John", "age": 30}
["apple", "bananas"]
["apple", "bananas"]
"hello"
42
31.76
true
false
null
جربها بنفسك مِن ملف json_from_python_all.py
عندما تقوم بالتحويل من Python إلى JSON ، يتم تحويل كائنات Python إلى مكافئ JSON لها في جافا سكريبت(JavaScript):
dict
المكافئ لها
Object
list
المكافئ لها
Array
tuple
المكافئ لها
Array
str
المكافئ لها
String
int
المكافئ لها
Number
float
المكافئ لها
Number
True
المكافئ لها
true
False
المكافئ لها
false
None
المكافئ لها
null
مثال
تحويل كائن Python يحتوي على كافة أنواع البيانات القانونية:
import json
x = {
"name": "John",
"age": 30,
"married": True,
"divorced": False,
"children": ("Ann","Billy"),
"pets": None,
"cars": [
{"model": "BMW 230", "mpg": 27.5},
{"model": "Ford Edge", "mpg": 24.1}
]
}
print(json.dumps(x))
ستكون النتيجة:
{"name": "John", "age": 30, "married": true, "divorced": false, "children": ["Ann", "Billy"], "pets": null, "cars": [{"model": "BMW 230", "mpg": 27.5}, {"model": "Ford Edge", "mpg": 24.1}]}
جربها بنفسك مِن ملف json_from_python_all_in_one.py
تنسيق النتيجة
المثال أعلاه يَطْبع سلسلة JSON ، لكن ليس من السهل قراءتها ، بدون مسافات بادئة أو إزاحة وفواصل أَسْطُر.
تحتوي الوظيفة json.dumps() على مُعامِلات لتسهيل قراءة النتيجة:
مثال
استخدم المعامِل indent لتحديد عدد الإزاحات أو المسافات البادئة:
import json
x = {
tab "name": "John",
tab "age": 30,
tab "married": True,
tab "divorced": False,
tab "children": ("Ann","Billy"),
tab "pets": None,
tab "cars": [
tab tab {"model": "BMW 230", "mpg": 27.5},
tab tab {"model": "Ford Edge", "mpg": 24.1}
tab ]
}
# use four indents to make it easier to read the result:
print(json.dumps(x, indent=4))
ستكون النتيجة:
{
tab tab "name": "John",
tab tab "age": 30,
tab tab "married": true,
tab tab "divorced": false,
tab tab "children": [
tab tab tab tab "Ann",
tab tab tab tab "Billy"
tab tab ],
tab tab "pets": null,
tab tab "cars": [
tab tab tab tab {
tab tab tab tab tab tab "model": "BMW 230",
tab tab tab tab tab tab "mpg": 27.5
tab tab tab tab },
tab tab tab tab {
tab tab tab tab tab tab "model": "Ford Edge",
tab tab tab tab tab tab "mpg": 24.1
tab tab tab tab }
tab tab ]
}
جربها بنفسك مِن ملف json_from_python_indent.py
يمكنك أيضًا تحديد الفواصل ، القيمة الافتراضية هي ("،"، ":") ، مما يعني استخدام فاصلة ومسافة لفصل كل كائن ، ونقطتين ومسافة لفصل المفاتيح عن القيم:
مثال
استخدام المعامِل separators لتغيير الفاصل الافتراضي:
import json
x = {
tab "name": "John",
tab "age": 30,
tab "married": True,
tab "divorced": False,
tab "children": ("Ann","Billy"),
tab "pets": None,
tab "cars": [
tab tab {"model": "BMW 230", "mpg": 27.5},
tab tab {"model": "Ford Edge", "mpg": 24.1}
tab ]
}
# use . and a space to separate objects, and a space, a = and a space to separate keys from their values:
print(json.dumps(x, indent=4, separators=(". ", " = ")))
ستكون النتيجة:
{
tab tab "name" = "John".
tab tab "age" = 30.
tab tab "married" = true.
tab tab "divorced" = false.
tab tab "children" = [
tab tab tab tab "Ann".
tab tab tab tab "Billy"
tab tab ].
tab tab "pets" = null.
tab tab "cars" = [
tab tab tab tab {
tab tab tab tab tab tab "model" = "BMW 230".
tab tab tab tab tab tab "mpg" = 27.5
tab tab tab tab }.
tab tab tab tab {
tab tab tab tab tab tab "model" = "Ford Edge".
tab tab tab tab tab tab "mpg" = 24.1
tab tab tab tab }
tab tab ]
}
جربها بنفسك مِن ملف json_from_python_separators.py
تنظيم أو ترتيب النتيجة
تحتوي الوظيفة json.dumps() على مُعامِلات لترتيب المفاتيح في النتيجة:
مثال
استخدم المُعامِل sort_keys لتحديد ما إذا كان يجب ترتيب أو فرز(sort) النتيجة أَم لا:
import json
x = {
tab "name": "John",
tab "age": 30,
tab "married": True,
tab "divorced": False,
tab "children": ("Ann","Billy"),
tab "pets": None,
tab "cars": [
tab tab {"model": "BMW 230", "mpg": 27.5},
tab tab {"model": "Ford Edge", "mpg": 24.1}
tab ]
}
# sort the result alphabetically by keys:
print(json.dumps(x, indent=4, sort_keys=True))
ستكون النتيجة:
{
tab tab "age": 30,
tab tab "cars": [
tab tab tab tab {
tab tab tab tab tab tab "model": "BMW 230",
tab tab tab tab tab tab "mpg": 27.5
tab tab tab tab },
tab tab tab tab {
tab tab tab tab tab tab "model": "Ford Edge",
tab tab tab tab tab tab "mpg": 24.1
tab tab tab tab }
tab tab ],
tab tab "children": [
tab tab tab tab "Ann",
tab tab tab tab "Billy"
tab tab ],
tab tab "divorced": false,
tab tab "married": true,
tab tab "name": "John",
tab tab "pets": null
}
جربها بنفسك مِن ملف json_from_python_sort_keys.py
الدرس مع الملفات المُرفقة:
https://www.dropbox.com/s/2ydksywwg4o2ntm/32Python%20JSON.zip?dl=1