English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP 基础教程

PHP 高级教程

PHP & MySQL

PHP 参考手册

تحليل JSON PHP

在本教程中,您将学习如何在PHP中编码和解码JSON数据。

什么是JSON

JSON表示 JavaScript Object Notation。JSON是一种标准的轻量级数据交换格式,可以快速,轻松地解析和生成。

JSON和XML一样,是一种基于文本的格式,对于人类和计算机而言都易于编写且易于理解,但是与XML不同,JSON数据结构所占用的带宽比XML版本少。JSON基于两个基本结构:

  • 对象:这被定义为键/值对(即key:value)的集合。每个对象都以左花括号开头,{并以右花括号结尾}。多个键/值对用逗号分隔,。

  • 数组:定义为值的有序列表。数组以左括号开头,以右括号[结尾]。值用逗号分隔,。

在JSON,键总是字符串,而值可以是stringnumbertrue或者falsenull甚至是object或者array。字符串必须用双引号("")括起来,并且可以包含转义字符,如\n,\t和\。JSON对象可能如下所示:

{
    "book": {
        "name": "Harry Potter and the Goblet of Fire",
        "author": "J. K. Rowling",
        "year": 2000,
        "genre": "Fantasy Fiction",
        "bestseller": true
    };
};

JSON数组的示例如下所示:

{
    "fruits": [
        "Apple",
        "Banana",
        "Strawberry",
        "Mango"
    ]
};

提示:数据交换格式是一种文本格式,用于在不同平台和操作系统之间交换或交换数据。JSON是Web应用程序中最流行,最轻量级的数据交换格式。

PHP解析JSON

JSON数据结构与PHP数组非常相似。PHP具有内置函数来编码和解码JSON数据。这些函数分别是 json_encode() 和 json_decode()。这两个函数仅适用于UTF-8编码的字符串数据。

PHP编码JSON数据

在PHP中,json_encode()函数用于将值编码为JSON格式。被编码的值可以是除资源之外的任何PHP数据类型,例如数据库或文件句柄。下面的示例演示如何将PHP关联数组编码为JSON对象:

<?php
//关联数组
$marks = array("Peter"=>65, "Harry"=>80, "John"=>78, "Clark"=>90);
 
echo json_encode($marks);
؟>
اختبار لرؤية‹/›

سيكون خروج مثال أعلاه كالتالي:

{"Peter":65,"Harry":80,"John":78,"Clark":90}

بالطبع، يمكنك أيضًا ترميزarrays المرتبطةتم ترميزه كarray JSON، مثل ما يلي:

<?php
//arrays المرتبطة
$colors = array("Red", "Green", "Blue", "Orange", "Yellow");
 
echo json_encode($colors);
؟>
اختبار لرؤية‹/›

سيكون خروج مثال أعلاه كالتالي:

["Red","Green","Blue","Orange","Yellow"]

يمكنك أيضًا استخدام خيار JSON_FORCE_OBJECT لتجعل دالة json_encode() تعود PHP array مرتبطًا كobject، مثل المثال التالي:

<?php
//arrays المرتبطة
$colors = array("Red", "Green", "Blue", "Orange");
 
echo json_encode($colors, JSON_FORCE_OBJECT);
؟>
اختبار لرؤية‹/›

سيكون خروج مثال أعلاه كالتالي:

 {"0":"Red","1":"Green","2":"Blue","3":"Orange"}

كما ترون في المثال السابق، يمكن ترميز arrays غير المرتبطة كarrays أو objects. ولكن يتم ترميز arrays المرتبطة دائمًا كobjects.

تفسير بيانات JSON باستخدام PHP

استيفاء بيانات JSON بسيط مثل تشفيرها. يمكنك استخدام دالة PHP json_decode() لتحويل النصوص المشفرة JSON إلى نوع البيانات المناسب في PHP. إليك مثال يوضح كيف يمكن تفكير JSON object أو تحويله إلىكائن PHP.

<?php
//البيانات JSON يتم حفظها في متغير PHP
$json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}';
 
var_dump(json_decode($json));
؟>
اختبار لرؤية‹/›

الناتج من المثال السابق يظهر كما يلي:

object(stdClass)#1 (4) { ["Peter"]=> int(65) ["Harry"]=> int(80) ["John"]=> int(78) ["Clark"]=> int(90) }

بالتقديم، يعود دالة json_decode() بمثابة كائن. ولكن يمكنك اختيار تحديد الثانية parameter $assoc، التي تأخذ قيمة منطقية، وعند تعيينها إلى true، يتم تحويل JSON object إلى array مرتبط. بالافتراض هو false. إليك مثالًا:

<?php
//البيانات JSON يتم حفظها في متغير PHP
$json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}';
 
var_dump(json_decode($json, true));
؟>
اختبار لرؤية‹/›

الناتج من المثال السابق يظهر كما يلي:

array(4) { ["Peter"]=> int(65) ["Harry"]=> int(80) ["John"]=> int(78) ["Clark"]=> int(90) }

الآن، دعنا نرى مثالاً يعرض لك كيفية تفكير بيانات JSON وتحقق من الوصول إلى العناصر المختلفة في JSON العنصرية أو المجموعات في PHP.

<?php
// تخصيص سلسلة JSON المدخلة إلى متغير PHP
$json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}';
 
//تحويل بيانات JSON إلى مجموعة مرتبطة
$arr = json_decode($json, true);
//استخدام القيم من المجموعة المرتبطة
echo $arr["Peter"];  //الناتج: 65
echo $arr["Harry"];  //الناتج: 80
echo $arr["John"];   //الناتج: 78
echo $arr["Clark"];  //الناتج: 90
 
//تحويل بيانات JSON إلى عنصر PHP
$obj = json_decode($json);
//استخدام القيم من العنصر المفكك
echo $obj->Peter;   //الناتج: 65
echo $obj->Harry;   //الناتج: 80
echo $obj->John;    //الناتج: 78
echo $obj->Clark;   //الناتج: 90
؟>
اختبار لرؤية‹/›

يمكنك أيضًا استخدامforeach()تدور في البيانات المفككة، مثلما يلي:

<?php
// تخصيص سلسلة JSON المدخلة إلى متغير PHP
$json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}';
 
//تحويل بيانات JSON إلى مجموعة مرتبطة
$arr = json_decode($json, true);
 
//تدور في مجموعة مرتبطة
foreach($arr as $key => $value){
    echo $key . "=>" . $value . "<br>";
};
echo \"<hr>\";;
//تحويل بيانات JSON إلى عنصر PHP
$obj = json_decode($json);
 
//تدور في العنصر
foreach($obj as $key=>$value){
    echo $key . "=>" . $value . "<br>";
};
؟>
اختبار لرؤية‹/›

استخراج القيم من البيانات JSON المدمجة في PHP

يمكن أن تكون JSON العنصرية والمجموعات مدمجة. يمكن للعناصر JSON أن تحتوي على عناصر JSON أخرى، ومجموعات مدمجة، ومجموعات مدمجة، ومجموعات من العناصر JSON، وما إلى ذلك. سيعرض هذا المثال كيفية تفكير JSON المدمج وتحديد القيم في PHP وطباعة جميع القيم.

<?php
//تعريف دالة مكررة لاستخراج القيم المدمجة
function printValues($arr) {
    global $count;
    global $values;
    
    //تحقق مما إذا كان المدخل مجموعة
    if(!is_array($arr)){
        die("خطأ: المدخل ليس مجموعة");
    };
    
    /*
        تدور في المجموعة، إذا كان value هو مجموعة، فإنه يتم استدعاء الدالة بشكل متكرر       
        الوظيفة تضيف القيم الموجودة إلى مجموعة العناصر الخروجية،        
        وزيادة معادلة العداد لكل قيمة وجدت
    */
    foreach($arr as $key => $value){
        if(is_array($value)){
            printValues($value);
        }; else{
            $values[] = $value;
            $count++;
        };
    };
    
    // عودة عدد العناصر الموجودة في المجموعة وجميع القيم
    return array('total' => $count, 'values' => $values);
};
 
// تخصيص سلسلة JSON المدخلة إلى متغير PHP
$json = '{
    "book": {
        "name": "Harry Potter and the Goblet of Fire",
        "author": "J. K. Rowling",
        "year": 2000,
        "characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"],
        "genre": "Fantasy Fiction",
        "price": {
            "paperback": "\$10.40", "hardcover": "\$20.32", "kindle": "4.11"
        };
    };
};
// تحويل بيانات JSON إلى نموذج PHP من نوع مفتوح
$arr = json_decode($json, true);
 
// استدعاء هذه الوظيفة وطباعة جميع القيم
$result = printValues($arr);
echo "<h3>" . $result[\"total\"] . "  قيمة(ات) وجدت: ";
echo implode("<br>", $result[\"values\"]));
 
echo \"<hr>\";;
 
// طباعة قيمة
echo $arr[\"book\"][\"author\"] . \"<br>\";; //الناتج: J. K. Rowling
echo $arr[\"book\"][\"characters\"][0] . \"<br>\";; //الناتج: Harry Potter
echo $arr[\"book\"][\"price\"][\"hardcover\"];; //الناتج: $20.32
؟>
اختبار لرؤية‹/›