الفرق بين المراجعتين ل"PHP/json decode"

من موسوعة حسوب
< PHP
اذهب إلى التنقل اذهب إلى البحث
سطر 18: سطر 18:
  
 
=== <code>assoc</code> ===
 
=== <code>assoc</code> ===
عندما تكون قيمته صحيحة <code>TRUE</code>، فستُحوَّل الكائنات المُعادة من الدّالّة إلى [http://php.net/manual/en/language.types.array.php مصفوفات] ترابطية (associative arrays).
+
عندما تكون قيمته صحيحة <code>TRUE</code>، فستُحوَّل [http://php.net/manual/en/language.types.object.php الكائنات] المُعادة من الدّالّة إلى [http://php.net/manual/en/language.types.array.php مصفوفات] ترابطية (associative arrays).
  
 
=== <code>depth</code> ===
 
=== <code>depth</code> ===
سطر 30: سطر 30:
  
 
== أمثلة ==
 
== أمثلة ==
'''المثال 1:''' أمثلة على استخدام الدالة <code>json_decode()</code>‎
+
 
 +
=== '''المثال 1:''' أمثلة على استخدام الدالة <code>json_decode()</code>‎ ===
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
 
<?php
 
<?php
سطر 55: سطر 56:
 
  ["e"] => int(5)
 
  ["e"] => int(5)
 
}
 
}
</syntaxhighlight>'''المثال 2:''' محاولة الوصول إلى خصائص غير صالحة للكائن
+
</syntaxhighlight>
  
 +
=== '''المثال 2:''' محاولة الوصول إلى خصائص غير صالحة للكائن ===
 
للوصول إلى عناصر الكائن التي تحتوي أحرف غير مسموح بها بموجب اتفاقيّة التّسمية في PHP (مثل الشرطة [hyphen]) فنضع اسم العنصر بين قوسين وبين علامتَي اقتباس.<syntaxhighlight lang="php">
 
للوصول إلى عناصر الكائن التي تحتوي أحرف غير مسموح بها بموجب اتفاقيّة التّسمية في PHP (مثل الشرطة [hyphen]) فنضع اسم العنصر بين قوسين وبين علامتَي اقتباس.<syntaxhighlight lang="php">
 
<?php
 
<?php
سطر 63: سطر 65:
 
print $obj->{'foo-bar'}; // 12345  
 
print $obj->{'foo-bar'}; // 12345  
 
?>
 
?>
</syntaxhighlight>'''المثال 3:''' أخطاء شائعة عند استخدام <code>()json_decode</code><syntaxhighlight lang="php">
+
</syntaxhighlight>
 +
 
 +
=== '''المثال 3:''' أخطاء شائعة عند استخدام <code>()json_decode</code> ===
 +
<syntaxhighlight lang="php">
 
<?php
 
<?php
 
// السّلاسل النصّيّة التّالية صالحة في جافاسكريبت وغير صالحة في JSON
 
// السّلاسل النصّيّة التّالية صالحة في جافاسكريبت وغير صالحة في JSON
سطر 82: سطر 87:
 
?>
 
?>
  
</syntaxhighlight>'''المثال 4:''' أخطاء مُعامِل العُمق <code>depth</code><syntaxhighlight lang="php">
+
</syntaxhighlight>
 +
 
 +
=== '''المثال 4:''' أخطاء مُعامِل العُمق <code>depth</code> ===
 +
<syntaxhighlight lang="php">
 
<?php
 
<?php
 
// ترميز البيانات
 
// ترميز البيانات
سطر 144: سطر 152:
 
Last error: JSON_ERROR_DEPTH
 
Last error: JSON_ERROR_DEPTH
  
</syntaxhighlight>'''المثال 5:''' استخدام <code>()json_decode</code> مع أعداد صحيحة كبيرة<syntaxhighlight lang="php">
+
</syntaxhighlight>
 +
 
 +
=== '''المثال 5:''' استخدام <code>()json_decode</code> مع أعداد صحيحة كبيرة ===
 +
<syntaxhighlight lang="php">
 
<?php
 
<?php
 
$json = '{"number": 12345678901234567890}';
 
$json = '{"number": 12345678901234567890}';
سطر 198: سطر 209:
 
|أُضيف دعم فك ترميز JSON للأنواع الأساسيّة.
 
|أُضيف دعم فك ترميز JSON للأنواع الأساسيّة.
 
|}
 
|}
 +
 +
== انظر أيضًا ==
 +
* الدالة <code>[http://php.net/manual/en/function.json-encode.php json_encode()‎]</code>: إعادة قيمة ما على شكل صيغة JSON.
 +
* الدالة <code>[http://php.net/manual/en/function.json-last-error.php json_last_error()‎]</code>: إعادة آخر خطأ حاصل.
 +
 +
== مصادر ==
 +
* [http://php.net/manual/en/function.json-decode.php صفحة الدالة json_decode في توثيق PHP الرسمي].

مراجعة 21:27، 9 أبريل 2018

(PHP 5 >= 5.2.0, PHP 7, PECL json >= 1.2.0)

تفك الدالة json_decode()‎ ترميز سلسلة نصية بصيغة JSON.

الوصف

mixed json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0]]] )

تأخذ سلسلة مُرمَّزة بصيغة JSON وتحوِّلها إلى مُتغيِّر PHP.

المعاملات

json

سلسلة json التي سيُفكُّ ترميزها.

تعمل هذه الدّالّة مع سلاسل نصّيّة مُرمَّزة بترميز UTF-8 فقط.

ملاحظة: تعتمد PHP مجموعة عُليا من JSON كما هو مُحدَّد في المعيار الأصلي RFC 7159.

assoc

عندما تكون قيمته صحيحة TRUE، فستُحوَّل الكائنات المُعادة من الدّالّة إلى مصفوفات ترابطية (associative arrays).

depth

عُمق المُعاوَدة (recursion) المُحدَّد من قبل المستخدم.

options

خيارات لفك ترميز JSON على شكل قناع بت Bitmask. هناك حاليًّا خياران مدعومان، الأوّل هو JSON_BIGINT_AS_STRING والذي يسمح بقلب الأعداد الصّحيحة الكبيرة إلى سلاسل نصّيّة بدلًا من أعداد ذات فاصلة عائمة float، وهو الخيار الافتراضي، الخيار الثّاني هو JSON_OBJECT_AS_ARRAY وله نفس تأثير تعيين قيمة المُعامِل assoc إلى TRUE.

القيم المعادة

تُعيد هذه الدّالّة القيمة المُرمَّزة في المُعامِل json إلى نوع مناسب في لغة PHP، تُعاد القيم true و false و null على شكل TRUE و FALSE و NULL على التوالي وبالتّرتيب. تُعاد القيمة NULL في حال تعذّر فك ترميز سلسلة json أو كانت البيانات المُرمَّزة أعمق من حدّ المُعاوَدة.

أمثلة

المثال 1: أمثلة على استخدام الدالة json_decode()

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>

ينتج عن المثال السّابق ما يلي:

object(stdClass)#1 (5) {
 	["a"] => int(1)
 	["b"] => int(2)
 	["c"] => int(3)
 	["d"] => int(4)
 	["e"] => int(5)
}

array(5) {
 	["a"] => int(1)
 	["b"] => int(2)
 	["c"] => int(3)
 	["d"] => int(4)
 	["e"] => int(5)
}

المثال 2: محاولة الوصول إلى خصائص غير صالحة للكائن

للوصول إلى عناصر الكائن التي تحتوي أحرف غير مسموح بها بموجب اتفاقيّة التّسمية في PHP (مثل الشرطة [hyphen]) فنضع اسم العنصر بين قوسين وبين علامتَي اقتباس.

<?php
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345 
?>

المثال 3: أخطاء شائعة عند استخدام ()json_decode

<?php
// السّلاسل النصّيّة التّالية صالحة في جافاسكريبت وغير صالحة في JSON
 
// يجب وضع الاسم والقيمة بين علامتي تنصيص مزدوجتين
// علامات التّنصيص المفردة غير صالحة هنا
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null
 
// يجب وضع الاسم بين علامتي تنصيص مزدوجتين
$bad_json = '{ bar: "baz" }';
json_decode($bad_json); // null
 
// لا يسمح بوضع الفواصل الزّائدة
$bad_json = '{ bar: "baz", }';
json_decode($bad_json); // null
 
?>

المثال 4: أخطاء مُعامِل العُمق depth

<?php
// ترميز البيانات
 
$json = json_encode(
    array(
        1 => array(
            'English' => array(
                'One',
                'January'
            ),
            'French' => array(
                'Une',
                'Janvier'
            )
        )
    )
);
 
// تعريف الأخطاء
 
$constants = get_defined_constants(true);
$json_errors = array();
foreach ($constants["json"] as $name => $value) {
    if (!strncmp($name, "JSON_ERROR_", 11)) {
        $json_errors[$value] = $name;
    }
}
 
// إظهار الأخطاء بحسب اختلاف العمق
 
foreach (range(4, 3, -1) as $depth) {
    var_dump(json_decode($json, true, $depth));
    echo 'Last error: ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL;
}
?>

ينتج عن المثال السّابق ما يلي:

array(1) {
  [1]=>
  array(2) {
        	["English"]=>
        	array(2) {
        	[0]=>
        	string(3) "One"
        	[1]=>
        	string(7) "January"
        	}
        	["French"]=>
        	array(2) {
        	[0]=>
        	string(3) "Une"
        	[1]=>
        	string(7) "Janvier"
        	}
  }
}
Last error: JSON_ERROR_NONE
 
NULL
Last error: JSON_ERROR_DEPTH

المثال 5: استخدام ()json_decode مع أعداد صحيحة كبيرة

<?php
$json = '{"number": 12345678901234567890}';
 
var_dump(json_decode($json));
var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));
 
?>

ينتج عن المثال السّابق ما يلي:

object(stdClass)#1 (1) {
  ["number"]=>
  float(1.2345678901235E+19)
}
object(stdClass)#1 (1) {
  ["number"]=>
  string(20) "12345678901234567890"
}

ملاحظات

خصائص JSON هي ليست JavaScript وإنّما مجموعة فرعيّة من JavaScript.

تُستخدَم الدّالّة ()json_last_error لتحديد طبيعة الخطأ بالضّبط في حال فشل فك التّرميز.

سجل التغيرات

الإصدار الوصف
7.1.0 يُرمَّز مفتاح JSON الفارغ ("") إلى خاصيّة كائن فارغة بدلًا من استخدام مفتاح مع القيمة _empty_.
7.0.0 رُفِضَت صيغ الأعداد غير المتوافقة مع المعيار RFC 7159، وهي المستويات العُليا من الأعداد (07، 0xff، .1، -.1) وكل مستويات الأعداد ([1.]، [1.e1]).
7.0.0 حدوث خطأ في صياغة JSON ناتج عن السّلسلة النصّيّة أو القيمة الفارغة في PHP والتي عند قلبها إلى سلسلة نصّيّة يكون الناتج سلسلة نصّيّة فارغة (NULL، أو FALSE).
5.6.0 لم تعد تُقبَل تنوعات أحرف القيم الثّابتة true و false و null المكتوبة بغير أحرف صغيرة كمُدخلات صالحة، وسيؤدّي استخدامها إلى تحذيرات.
5.4.0 أُضيف المُعامِل options.
5.3.0 أُضيف المُعامِل الاختياري depth، ورُفِعَت القيمة الافتراضيّة لعمق المُعاوَدة من 128 إلى 512.
5.2.3 رُفِعَت قيمة حدّ التداخل من 20 إلى 128.
5.2.1 أُضيف دعم فك ترميز JSON للأنواع الأساسيّة.

انظر أيضًا

مصادر