تو این مقاله ابتدا به معرفی فایل های json پرداخته میشه و سپس با نحوه کار کردن با این فایل ها در پایتون آشنا میشیم.

از صفر شروع کنیم...
JSON مخفف JavaScript Object Notation هست.
JSON فقط یه قالب برای نگهداری و انتقال اطلاعاته! یعنی یه مدل برای نوشتن دادهها.
خیلی سبکه، خیلی سادهست و همهجا قابل خوندنه.
JSON شبیه به دیکشنری ها در پایتونه. مثال:
{ "name": "AmirHossein", "age": 21, "is_hacker": false }
دادهها به شکل کلید و مقدار (key-value) ذخیره میشن.
کلیدها همیشه رشته هستن (با دابل کوتیشن)
مقادیر میتونن اینا باشن:
"String" ==> تفاوتی با رشته ها داخل پایتون نداره
13 ==> تفاوتی با اعداد داخل پایتون نداره
true/false ==> پایتون این دو کلمه رو با حروف بزرگ و کوچیک مشخص کرده
null (تهی) ==> پایتون از کلمه None برای این مورد استفاده میکنه
همچنین، ساختارها میتونن تو در تو باشن.
JSON در دنیای واقعی کجا استفاده میشه؟
ارسال اطلاعات بین سرور و کاربر (APIها)
تنظیمات برنامهها (مثل فایل config)
ذخیره دادهها روی دیسک به شکل سبک و قابلخواندن
تحلیل لاگها
ارتباط بین ابزارهای مختلف
نکته. فایل های json پسوند json. دارن. مثل: data.json
توی پایتون چطور از json استفاده کنیم؟
پایتون یه ماژول به اسم json داره. کافیه بنویسی:
import json
با این ماژول میتونی:
JSON رو به پایتون تبدیل کنی
پایتون رو به JSON تبدیل کنی
توی فایل JSON اطلاعات بخونی یا قرار بدی
منظور از اینکه json رو به پایتون تبدیل کنی یا پایتون رو به json تبدیل کنی چیه؟
کد زیر یه دیکشنری داخل پایتونه:
user = { "username": "amirhossein", "level": 99, "active": True }
این یه شی پایتونیه. پایتون خودش میدونه با این چطوری کار کنه، چون حافظهی زنده و داخلیشه.
حالا فرض کن میخوای این داده رو بفرستی به یه فایل،به یه API، یا به یه سیستم دیگه.
ما نمیتونیم مستقیم یه دیکشنری پایتون رو ذخیره کنیم یا بفرستیم، چون این فقط تو حافظهی پایتونه و خارج از اون قابل درک نیست.
باید این داده رو تبدیل کنیم به یه فرمت قابلخواندن و قابلحمل برای همه جا...
اینجاست که JSON وارد میشه.
به همین دلیل من میام داده پایتون رو تبدیل میکنم به داده json و اگه شخص یا برنامهی دیگهایی لازمش داشت، فقط کافیه اون داده json رو تبدیل کنه به دادهایی که زبان برنامه نویسیش باهاش کار میکنه. (مثلا من داده پایتون رو تبدیل میکنم به json و شما json رو میگیری و تبدیلش میکنه به داده جاوااسکریپت تا بتونی ازش داخل کدت استفاده کنی)
متد json.dump اطلاعات پایتونی رو تبدیل به ساختار json میکنه و میتونم داخل یک فایل json ذخیره کنم. مثال:
import json data = { "username": "amirhossein", "age": 21, "hacker": False } with open("info.json", "w") as f: json.dump(data, f, indent=4)
توی خط 9 فایل رو برای نوشتن باز کردیم (اگه نبود میسازه)
توی خط 10 داده پایتونی رو توی ورودی اول دادم تا تبدیل کنه به ساختار json و سپس تو ورودی دوم متغییر مربوط به فایل json رو نوشتم تا داده تبدیل شده رو داخلش بریزه. تو ورودی سوم هم فقط برای زیبایی گفتم هر لایه تا 4 اسپیس تو رفتگی داشته باشه.
محتوای فایل json بعد از اجرا:
{ "username": "amirhossein", "age": 21, "hacker": false }
متد json.load دادههای json رو میخونه و تبدیل میکنه به ساختار پایتونی و میتونم ازشون داخل کدم استفاده کنم. برای مثالش من میخوام همون فایل info.json که تو مثال قبل ایجادش کردم رو باز کنم و محتوای داخلش رو بخونم:
import json with open("info.json", "r") as f: data = json.load(f) print(data) print(data["username"])
تو خط 3 فایل رو برای خوندن باز کردم.
تو خط 4 دادههای json رو به واسطه متد مربوطه تبدیل به دیکشنری پایتون کردم و ریختم تو متغییر data.
خروجی:
{'username': 'amirhossein', 'age': 21, 'hacker': False} amirhossein
درنهایت:
()json.dump مینویسه توی فایل.
()json.load میخونه از فایل.
در کنار متد json.dump و json.load متدهای json.dumps و json.loads هم داریم. تفاوتشون چیه؟
متد json.load از یک فایل json دادههارو میخونه و به ساختار پایتون تبدیل میکنه (قبلا مثالش رو کار کردیم)
و اما متد json.loads از یک رشته دادههای json رو میخونه و تبدیل میکنه به پایتون. مثال:
import json json_string = '{"name": "amir", "age": 25}' data = json.loads(json_string) print(data["name"]) # amir
اگه سعی کن به json.loads یک فایل بدم تا ازش دادههارو بخونه، خطا میده و میگه فقط برای کار با رشته های json ساخته شده.
(با توجه به تعریف بالا، متد dump داده پایتونی رو داخل فایل json قرار میده، اما متد dumps داده پایتونی رو تبدیل به یک رشته json میکنه و نمیتونه داخل فایلی قرارش بده)
برای درک بهتر به کد زیر دقت کنید:
from json import dump, load my_dict = { "name" : "Amirhosein", "family" : "Nazouri", "age" : 21, "job" : "programming", "single" : True, "other" : { "Instagram Account" : "mrNazouri13", "Telegram Account" : "mrNazouri13", "Youtube Account" : "mrNazouri13", "virgool Account" : "mrNazouri13", "All Social Media" : [ "Telegram", "Instagra", "Youtube", "Github", "virgool" ] } } with open("info.json", "w") as jf: dump(my_dict, jf, indent = 4)
محتوای فایل json:
{ "name": "Amirhosein", "family": "Nazouri", "age": 21, "job": "programming", "single": true, "other": { "Instagram Account": "mrNazouri13", "Telegram Account": "mrNazouri13", "Youtube Account": "mrNazouri13", "virgool Account": "mrNazouri13", "All Social Media": [ "Telegram", "Instagra", "Youtube", "Github", "virgool" ] } }
و برای خوندن از فایل json:
from json import dump, load with open("info.json", "r") as jf: my_dict = load(jf) print(my_dict)
نکته. کل ساختار و دادههای json باید داخل {} قرار بگیره.
بین آیتم های مختلف باید , قرار بدیم.