ویدیو کار با فایل های json در پایتون

امیرحسین بیگدلو May 2024

پیش نیاز: json چیست؟

در این ویدیو میبینیم که چطور میشه در پایتون با فایل های json کار کرد و یک API هم آماده کردم تا بتونیم اطلاعاتی رو که اون API با json برای ما میفرسته رو هندل کنیم. به API میتونید از اینجا دسترسی پیدا کنید.

 

# نوع داده JSON چیست؟

جیسان (json) فرمتی برای ذخیره داده ها است. معمولا از json برای انتقال داده بین سرور و مرورگر استفاده میشود. جیسان از همان ابتدای معرفی تبدیل به یک استاندار برای تبادل اطلاعات شد. نوع داده json ابتدا برای زبان برنامه نویسی جاوااسکریپت ایجاد شد اما به دلیل سادگی خوانایی برای انسان و ماشین، بعدا توسط دیگر زبان های برنامه نویسی نیز استفاده شد. دقت کنید که json تنها روش برای انتقال داده ها نیست، شما میتوانید از فرمت های دیگر مانند XML یا YAML نیز استفاده کنید.

ساختار json بسیار ساده است و در مثال زیر یک آبجکت json ایجاد کرده ایم:

{
  "name": "amir",
  "age": 30,
  "email": "mongard.amir@gmail.com",
  "is_employee": true,
  "hobbies": [
    "reading",
    "traveling"
  ],
  "address": {
    "street": "123 Main Street",
    "city": "Tehran",
    "zip": "10001"
  }
}

در مثال بالا ما یک آبجکت json ایجاد کرده ایم که دارای چندین ویژگی مانند name, age, is_employee است. همانطور که مشخص است شما میتوانید مقادیر تودرتو را درون یک آرایه ایجاد کنید. در مثال بالا ویژگی های hobbies و address دو آرایه هستند که خود دارای چندین ویژگی دیگر هستند. دقت کنید که تمام مقادیر json به شکل key-value ذخیره میشوند که کلید یک رشته(str) خواهد بود و مقدار میتوانید رشته، عدد، boolean یا آرایه یا یک آبجکت باشد.

 

# استفاده از ماژول json پایتون

خوشبختانه پایتون به صورت پیشفرض از json پشتیبانی میکند. پایتون در کتابخانه استاندارد خود دارای یک ماژول به نام json است که به شما اجازه میدهد به سادگی تمام با نوع داده جیسان کار کنید. فقط کافیست که از کد زیر استفاده کنید:

import json

حالا که ماژول مورد نیاز را ایمپورت کردید، میتوانید از متدها و کلاس‌های قدرتمند پایتون برای کار با فایل‌های json استفاده کنید.

در پایتون شما میتوانید داده‌های خود را تبدیل کنید. به فرآیند تبدیل آبجکت‌ های پایتونی به یک رشته json، سریال سازی(serialization) گفته میشود. شما باید داده های خود را به json تبدیل کنید تا بتوانید آنها را بین برنامه ها یا سیستم ها منتقل کنید. سریال سازی json یک تکنیک رایج در توسعه وب میباشد. در مقابل، اگر یک رشته json را به آبجکت‌ های پایتونی تبدیل کنید سریال زدایی (deserialization) انجام داده‌اید. اگر بخواهید داده‌های دریافتی خود را در برنامه استفاده کنید باید عملیات سریال زدایی را انجام دهید.

 

# تبدیل آبجکت پایتون به json

برای تبدیل یک آبجکت پایتون به json میتوانید از تابع dumps استفاده کنید. این تابع به عنوان آرگومان یک آبجکت پایتونی گرفته و یک رشته json برمیگرداند. به مثال زیر دقت کنید:

import json

# Python object to JSON string
python_obj = {'name': 'John', 'age': 30}

json_string = json.dumps(python_obj)
print(json_string)  

# output: {"name": "John", "age": 30}

طبق جدولی که در ماژول json پایتون وجود دارد، آبجکت های پایتون به مقادیر مختلفی از json تبدیل خواهند شد:

Python JSON
dict object
list, tuple array
str string
int, long, float number
True true
False false
None null

 

# تبدیل json به آبجکت پایتون

برای اینکه بتوانید نوع داده json را به یک آبجکت پایتونی تبدیل کنید باید از متد loads استفاده کنید. تابع loads به عنوان آرگومان یک رشته json گرفته و یک آبجکت پایتونی مناسب برمیگرداند. به مثال زیر دقت کنید:

import json

# JSON string to Python object
json_string = '{"name": "John", "age": 30}'

python_obj = json.loads(json_string)

print(python_obj)  
# output: {'name': 'John', 'age': 30}

 

# ذخیره داده ها در فایل json

تابع دیگری که در ماژول json پایتون وجود دارد، متد dump میباشد. از این تابع میتوانید برای تبدیل آبجکت های پایتونی و ذخیره آنها در یک فایل json استفاده کنید. به مثال زیر دقت کنید:

import json

# serialize Python object and write to JSON file
python_obj = {'name': 'John', 'age': 30}
with open('data.json', 'w') as file:
    json.dump(python_obj, file)

 

# خواندن فایل json

برای خواندن فایل های json و تبدیل محتویات به آبجکت‌های پایتونی میتوانید از تابع load پایتون استفاده کنید. تابع load به عنوان آرگومان یک فایل json را گرفته و محتویات آن را به پایتون تبدیل میکند. به مثال زیر دقت کنید:

import json

# read JSON file and parse contents
with open('data.json', 'r') as file:
    python_obj = json.load(file)
print(python_obj)  

# output: {'name': 'John', 'age': 30}

 

# چند نکته برای بهبود عملکرد json در پایتون

هنگامی که با حجم زیادی از داده های json کار میکنید، بهینه سازی کد برای اطمینان از اجرای کارآمد آن مهم است. در اینجا به چند نکته برای بهنیه سازی عملکرد json در پایتون اشاره میکنیم:

1. میتوانید از کتابخانه ‌های ujson و cjson استفاده کنید که سرعت تبدیل داده‌ بیشتری نسبت به ماژول json پیشفرض پایتون دارند.

2. از تبدیل کردن غیرضروری داده ها خودداری کنید. سعی کنید در صورت امکان از داده های json به شکل مستقیم استفاده کنید و آنها را به پایتون تبدیل نکنید.

3. در زمان کار با حجم زیاد داده json میتوانید از generators پایتون استفاده کنید که باعث صرفه جویی در استفاده از حافظه خواهد شد.

4. برای انتقال داده های json در شبکه از روش های فشرده سازی مثل gzip استفاده کنید.

5. اگر قرار است چندین بار از داده های یکسان json استفاده کنید، بهتر است از کش استفاده کنید.

ویدیوهای مشابه



آموزش monkey patch در پایتون
امیرحسین بیگدلو
ویدیو زبان yaml چیست
امیرحسین بیگدلو

ارسال نظر


Amin

4 ماه قبل پاسخ به نظر

عالی

ارسال نظر



amp

1 سال قبل پاسخ به نظر

درود استاد
من دارم با فلاسک یه سایت می نویسم و زمانی که از متد open توی load استفاده می کنم به من ارور می دهد:
File=load(open('a.json'))
می دونم که ارور از open هست اما نمی دونم چرا

ارسال نظر



امیرحسین بیگدلو

1 سال قبل

سلام
والا منم نمیدونم

ali

1 سال قبل پاسخ به نظر

با سلام من آدرس یک وب سرویس دریافت اطلاعات هواشناسی دارم و یک آدرس توکن که توکن user &pass داره حالا نمی تونم چطور با استفاده از کتابخانه requests و json این اطلاعات را در پایتون دریافت کنم ممنون میشم کمک کنید یا فیلم آموزشی تهیه کنید.
سپاسگزارم

ارسال نظر



امیرحسین بیگدلو

1 سال قبل

سلام
باید دوره وب اسکرپینگ پایتون رو ببینید

حمبید

2 سال قبل پاسخ به نظر

سلام وقت بخیر
آیا میتوان داده هایی از یک سایت که اطلاعاتی را توسط api یک برنامه به ما میدهد مستقیما در حافظه رم قرار داد بجای اینکه در یک فایل با فرمت csv ذخیره نمود؟ (بطور کلی داده ها را از جایی دریافت و بجای هارد روی رم ذخیره کرد).

ارسال نظر



امیرحسین بیگدلو

2 سال قبل

سلام
من بلد نیستم و با پایتون هم فکر نکنم بتونید اینکار رو انجام بدین.


Reza

1 سال قبل

اگرمنظور شما از حافظه رم همان فلش مموری (کول دیسک) است. باید آدرس مسیرآن را کپی و در دستور json.dump( )z قرار دهید.

mamad

3 سال قبل پاسخ به نظر

چرا در بخش phone در فایل جیسونی ابتدا عدد صفر رو میزاریم ارورو میده ؟

ارسال نظر



حسام

3 سال قبل پاسخ به نظر

سلام
ببخشید یه برنامه نوشتم که هر اینپوتی که میگیره داخل یه جیسون به صورت دیکشنری ذخیره بکنه ولی هربار فقط داخل جیسون همون مقداری که دادم ذخیره میشه و چیزی بهش اضافه نمیشه
ببخشید البته ممکنه بگید ایراد کارم کجاست ؟
import json
key=input("import :")
value=input("import :")
test={}
test[f"{key}"] = f"{value}"

with open("1.json" , "w") as f:
json.dump(test ,f, indent=2)

with open("1.json") as f:
result = json.load(f)

print(result)

ارسال نظر



یاسین

2 سال قبل

از مود a باید استفاده کرد نه w

anonymous

3 سال قبل پاسخ به نظر

خیلیییییییی عالی بود.
بلد نبودم ولی یادگرفتم.
مرسی

ارسال نظر



یه بنده خدا

2 سال قبل

منم همینطور

sharare

3 سال قبل پاسخ به نظر

سلام وقتتون بخیر
بعضی از ویدئوها بعد از دو سه ثانیه از شروعش مشکل داره و می ایسته و play نمیشه
من چندبار تست کردم

ارسال نظر



امیرحسین بیگدلو

3 سال قبل

سلام
مشکل از سمت سرور هست. بزودی برطرف میشن

مونگارد