سورس سافت | سورس پروژه | دانلود پروژه | سورس کد


م
ن
و
سورس سافت

ادامه مطلب

آموزش نحوه تجزیه JSON در PHP



آموزش نحوه تجزیه JSON در PHP

JSON در PHP، مخفف JavaScript Object Notation، یک قالب رایج سبک برای ذخیره و تبادل اطلاعات است. این قالب همان طور که از نامش پیداست، از جاوا اسکریپت گرفته شده است. اما یک فرمت مستقل از زبان برای ذخیره اطلاعات است. بسیاری از زبان ها مانند PHP در حال حاضر توابع را برای خواندن و ایجاد داده های JSON پیاده سازی می کنند. ما در این آموزش می خواهیم به نحوه تجزیه JSON در PHP به صورت کامل و مرحله به مرحله بپردازیم. با ما همراه باشید.!

آموزش نحوه تجزیه JSON در PHP

فرض کنید شما فایلی دارید که حاوی اطلاعاتی با فرمت JSON است. چگونه به PHP دسترسی پیدا کرده و ذخیره می کنید؟

ابتدا، باید داده های فایل را با استفاده از file_get_contents () وارد یک متغیر کنید. هنگامی که داده ها در یک رشته قرار دارند، می توانید تابع json_decode () را فراخوانی کنید تا اطلاعات را از رشته استخراج کنید. به خاطر داشته باشید که JSON به سادگی راهی برای ذخیره اطلاعات به عنوان یک رشته با استفاده از مجموعه ای از قوانین از پیش تعیین شده ارائه می دهد. وظیفه ما این است که رشته ها را به درستی رمزگشایی کنیم و اطلاعات مورد نظر خود را به دست آوریم.

خواندن JSON از یک فایل یا رشته در PHP

از چهار پارامتر پذیرفته شده توسط تابع json_decode ()، فقط به دو پارامتر اول نیاز دارید. پارامتر اول رشته ای را که می خواهید رمزگشایی شود مشخص می کند. پارامتر دوم نحوه بازگشت داده های رمزگشایی را تعیین می کند. اگر آن را روی true قرار دهید یک آرایه انجمنی و false اشیا را برمی گرداند. در اینجا یک مثال اساسی وجود دارد. ما فایلی به نام people.json با محتویات زیر داریم:

{
    "name": "Monty",
    "email": "[email protected]",
    "age": 77
}

ما می توانیم اطلاعات این فایل JSON را با استفاده از کد زیر بخوانیم:

<?php
$people_json = file_get_contents('people.json');
$decoded_json = json_decode($people_json, false);
echo $decoded_json->name;
// Monty
echo $decoded_json->email;
// [email protected]
echo $decoded_json->age;
// 77
?>

در مثال بالا، json_decode () یک شی را برگرداند. زیرا پارامتر دوم روی false تنظیم شده است. برای بازگشت داده ها به عنوان یک آرایه انجمنی، می توانید آن را روی true تنظیم کنید.

<?php
$people_json = file_get_contents('people.json');
$decoded_json = json_decode($people_json, true);
echo $decoded_json['name'];
// Monty
echo $decoded_json['email'];
// [email protected]
echo $decoded_json['age'];
// 77
?>

اکنون، JSON را که کمی پیچیده تر است رمزگشایی می کنیم و سعی می کنیم اطلاعات مفید را از آن به دست آوریم.

{
"name": "Monty",
"email": "[email protected]",
"age": 77,
"countries": [
{"name": "Spain", "year": 1982},
{"name": "Australia", "year": 1996},
{"name": "Germany", "year": 1987}
]
}

هدف ما بازگرداندن همه کشورهایی است که در سالهای مختلف توسط شخص مورد بازدید قرار گرفته است. مقدار برگشتی توسط $ decoded_json [‘country’] در واقع یک آرایه خواهد بود و ما آن را مانند آرایه های معمولی برای به دست آوردن داده های خود حلقه می کنیم.

<?php
$people_json = file_get_contents('people.json');
$decoded_json = json_decode($people_json, true);
$name = $decoded_json['name'];
$countries = $decoded_json['countries'];
foreach($countries as $country) {
    echo $name.' visited '.$country['name'].' in '.$country['year'].'.';
}
/*
Monty visited Spain in 1982.
Monty visited Australia in 1996.
Monty visited Germany in 1987.
*/
?>

بیایید تنها به آخرین مثال استخراج اطلاعات از یک فایل JSON بپردازیم. در اینجا JSON است که ما داده های خود را از آن استخراج می کنیم.

{
    "customers": [
      {
        "name": "Andrew",
        "email": "[email protected]",
        "age": 62,
        "countries": [
          {
            "name": "Italy",
            "year": 1983
          },
          {
            "name": "Canada",
            "year": 1998
          },
          {
            "name": "Germany",
            "year": 2003
          }
        ]
      },
      {
        "name": "Sajal",
        "email": "[email protected]",
        "age": 65,
        "countries": [
          {
            "name": "Belgium",
            "year": 1994
          },
          {
            "name": "Hungary",
            "year": 2001
          },
          {
            "name": "Chile",
            "year": 2013
          }
        ]
      },
      {
        "name": "Adam",
        "email": "[email protected]",
        "age": 72,
        "countries": [
          {
            "name": "France",
            "year": 1988
          },
          {
            "name": "Brazil",
            "year": 1998
          },
          {
            "name": "Poland",
            "year": 2002
          }
        ]
      },
      {
        "name": "Monty",
        "email": "[email protected]",
        "age": 77,
        "countries": [
          {
            "name": "Spain",
            "year": 1982
          },
          {
            "name": "Australia",
            "year": 1996
          },
          {
            "name": "Germany",
            "year": 1987
          }
        ]
      }
    ]
}

این بار دو آرایه تو در تو در داده های JSON داریم. بنابراین ما از دو حلقه تو در تو برای استفاده از کشورهای مختلف توسط مشتریان مختلف استفاده خواهیم کرد.

<?php
$people_json = file_get_contents('people.json');
$decoded_json = json_decode($people_json, true);
$customers = $decoded_json['customers'];
foreach($customers as $customer) {
    $name = $customer['name'];
    $countries = $customer['countries'];
    foreach($countries as $country) {
        echo $name.' visited '.$country['name'].' in '.$country['year'].'.';
    }
}
/*
Andrew visited Italy in 1983.
Andrew visited Canada in 1998.
Andrew visited Germany in 2003.
Sajal visited Belgium in 1994.
Sajal visited Hungary in 2001.
Sajal visited Chile in 2013.
Adam visited France in 1988.
Adam visited Brazil in 1998.
Adam visited Poland in 2002.
Monty visited Spain in 1982.
Monty visited Australia in 1996.
Monty visited Germany in 1987.
*/
?>

اکنون باید روشی را که برای خواندن داده های JSON از یک فایل بستگی به نحوه ایجاد آن دارد، در نظر بگیرید.

خواندن داده های JSON بدون اطلاع از کلیدها از قبل

تا کنون ما داده های JSON را خوانده ایم که قبلاً همه کلیدها را می دانستیم. این ممکن است همیشه درست نباشد. خوشبختانه، ما هنوز می توانیم اطلاعات مفید را از پرونده ای که به عنوان یک آرایه انجمنی ذخیره کرده ایم، استخراج کنیم. مثال زیر همه چیز را روشن می کند.

{
    "kdsvhe": {
        "name": "Andrew",
        "age": 62
    },
    "lvnwfd": {
        "name": "Adam",
        "age": 65
    },
    "ewrhbw": {
        "name": "Sajal",
        "age": 72
    },
    "klkwcn": {
        "name": "Monty",
        "age": 77
    }
}

به نظر می رسد کلیدهای JSON فوق، رشته های تصادفی هستند که نمی توانیم از قبل آن ها را پیش بینی کنیم. با این حال، هنگامی که آن را به یک آرایه انجمنی تبدیل می کنیم، دیگر نیازی به دانستن مقادیر کلیدی دقیق برای تکرار از طریق داده ها نخواهیم داشت.

<?php
$people_json = file_get_contents('people.json');
$decoded_json = json_decode($people_json, true);
foreach($decoded_json as $key => $value) {
    $name = $decoded_json[$key]["name"];
    $age = $decoded_json[$key]["age"];
    echo $name.' is '.$age.' years old.';
}
/*
Andrew is 62 years old.
Adam is 65 years old.
Sajal is 72 years old.
Monty is 77 years old.
*/
?>

 

ایجاد داده های JSON در PHP

با استفاده از تابع json_encode () می توانید داده های خود را به یک رشته JSON با فرمت خوب در PHP تبدیل کنید. این اساساً سه پارامتر را می پذیرد، اما شما معمولاً فقط به پارامتر اول نیاز دارید، یعنی مقداری که می خواهید در بیشتر موقعیت ها رمزگذاری کنید.

<?php
$people_info = [
    "customers" => [
        ["name" => "Andrew", "score" => 62.5],
        ["name" => "Adam", "score" => 65.0],
        ["name" => "Sajal", "score" => 72.2],
        ["name" => "Monty", "score" => 57.8]
    ]
];
echo json_encode($people_info);
/*
{"customers":[{"name":"Andrew","score":62.5},{"name":"Adam","score":65},{"name":"Sajal","score":72.2},{"name":"Monty","score":57.8}]}
*/
?>

همچنین ممکن است برای به دست آوردن رشته JSON در قالب دلخواه، از برخی پرچم ها استفاده کنید. برای مثال، می توانید از پرچم JSON_PRETTY_PRINT برای افزودن فضای سفید برای قالب بندی مناسب رشته JSON استفاده کنید. به طور مشابه، می توانید از پرچم JSON_PRESERVE_ZERO_FRACTION استفاده کنید تا مطمئن شوید که مقادیر شناور همیشه به عنوان شناور ذخیره می شوند، حتی اگر از نظر اندازه با عدد صحیح معادل باشند. می توانید لیستی از همه پرچم ها را در اسناد رسمی مشاهده کنید.

<?php
$people_info = [
    "customers" => [
        ["name" => "Andrew", "score" => 62.5],
        ["name" => "Adam", "score" => 65.0],
        ["name" => "Sajal", "score" => 72.2],
        ["name" => "Monty", "score" => 57.8]
    ]
];
echo json_encode($people_info, JSON_PRETTY_PRINT|JSON_PRESERVE_ZERO_FRACTION);
/*
{
    "customers": [
        {
            "name": "Andrew",
            "score": 62.5
        },
        {
            "name": "Adam",
            "score": 65.0
        },
        {
            "name": "Sajal",
            "score": 72.2
        },
        {
            "name": "Monty",
            "score": 57.8
        }
    ]
}
*/
?>

برخورد با خطاها در هنگام رمزگذاری و رمزگشایی

قالب JSON ما را ملزم می کند تا از قوانین خاصی برای کدگذاری و رمزگشایی مناسب رشته ها پیروی کنیم. به عنوان مثال، نام ها و مقادیر باید در نقل قول های دوگانه محصور شوند و نباید بعد از جفت نام، مقدار کاما خالی وجود داشته باشد. تابع json_last_error_msg () می تواند به شما کمک کند بفهمید چه نوع خطایی دریافت می کنید تا بتوانید اقدامات مناسب را انجام دهید. در اینجا یک مثال بسیار اساسی وجود دارد:

<?php
$sample_json = '{"name": "value", }';
var_dump(json_decode($sample_json));
// NULL
echo json_last_error_msg();
// Syntax error
?>

 

نتیجه گیری

در این آموزش، نحوه خواندن داده های JSON از یک فایل یا رشته در PHP را یاد گرفتید. شما همچنین آموختید که چگونه JSON را به یک آرایه تبدیل کرده و از آن عبور کنید تا اطلاعات موردنظر خود را استخراج کنید. اکنون باید بتوانید اطلاعاتی را از JSON در فایلی دریافت کنید که در آن همه کلیدهای جفت کلید-مقدار را نمی دانید.

در دو بخش گذشته، ما نحوه سختگیری داده ها به عنوان JSON در PHP و خطاهایی که ممکن است در حین فرایند رمزگذاری و رمزگشایی با آن ها مواجه شوید را پوشش دادیم.

امیدوارم این به همه سوالات شما در مورد رمزگذاری و رمزگشایی JSON در PHP پاسخ دهد.


لینک کوتاه مطلب :
https://sourcesoft.ir/?p=2700

درباره نویسنده

تیم محتوا 11 نوشته در سورس سافت دارد . مشاهده تمام نوشته های

دیدگاه ها


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

logo-samandehi