الفرق بين المراجعتين لصفحة: «PHP/json decode»

من موسوعة حسوب
< PHP
ط إضافة تصنيفات
 
(2 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 11: سطر 11:


=== <code>json</code> ===
=== <code>json</code> ===
[http://php.net/manual/en/language.types.string.php سلسلة] json التي سيُفكُّ ترميزها.
[[PHP/Types/string|سلسلة نصية]] بصيغة JSON التي سيُفكُّ ترميزها.


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


=== <code>assoc</code> ===
=== <code>assoc</code> ===
عندما تكون قيمته صحيحة <code>TRUE</code>، فستُحوَّل [http://php.net/manual/en/language.types.object.php الكائنات] المُعادة من الدّالّة إلى [http://php.net/manual/en/language.types.array.php مصفوفات] ترابطية (associative arrays).
عندما تكون قيمته صحيحة <code>TRUE</code>، فستُحوَّل [[PHP/object|الكائنات]] المُعادة من الدّالّة إلى [[PHP/array|مصفوفات]] ترابطية (associative arrays).


=== <code>depth</code> ===
=== <code>depth</code> ===
سطر 27: سطر 27:


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


== أمثلة ==
== أمثلة ==
 
المثال 1: أمثلة على استخدام الدالة <code>json_decode()</code>‎<syntaxhighlight lang="php">
=== '''المثال 1:''' أمثلة على استخدام الدالة <code>json_decode()</code>‎ ===
<syntaxhighlight lang="php">
<?php
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
سطر 40: سطر 38:
</syntaxhighlight>
</syntaxhighlight>
ينتج عن المثال السّابق ما يلي:
ينتج عن المثال السّابق ما يلي:
<syntaxhighlight>
<syntaxhighlight lang="text">
object(stdClass)#1 (5) {
object(stdClass)#1 (5) {
  ["a"] => int(1)
  ["a"] => int(1)
سطر 57: سطر 55:
}
}
</syntaxhighlight>
</syntaxhighlight>
المثال 2: محاولة الوصول إلى خصائص غير صالحة للكائن


=== '''المثال 2:''' محاولة الوصول إلى خصائص غير صالحة للكائن ===
للوصول إلى عناصر الكائن التي تحتوي أحرف غير مسموح بها بموجب اتفاقيّة التّسمية في PHP (مثل الشرطة [hyphen]) فنضع اسم العنصر بين قوسين وبين علامتَي اقتباس.<syntaxhighlight lang="php">
للوصول إلى عناصر الكائن التي تحتوي أحرف غير مسموح بها بموجب اتفاقيّة التّسمية في PHP (مثل الشرطة [hyphen]) فنضع اسم العنصر بين قوسين وبين علامتَي اقتباس.<syntaxhighlight lang="php">
<?php
<?php
سطر 65: سطر 63:
print $obj->{'foo-bar'}; // 12345  
print $obj->{'foo-bar'}; // 12345  
?>
?>
</syntaxhighlight>
</syntaxhighlight>المثال 3: أخطاء شائعة عند استخدام <code>()json_decode</code><syntaxhighlight lang="php">
 
=== '''المثال 3:''' أخطاء شائعة عند استخدام <code>()json_decode</code> ===
<syntaxhighlight lang="php">
<?php
<?php
// السّلاسل النصّيّة التّالية صالحة في جافاسكريبت وغير صالحة في JSON
// السّلاسل النصّيّة التّالية صالحة في جافاسكريبت وغير صالحة في JSON
سطر 87: سطر 82:
?>
?>


</syntaxhighlight>
</syntaxhighlight>المثال 4: أخطاء مُعامِل العُمق <code>depth</code><syntaxhighlight lang="php">
 
=== '''المثال 4:''' أخطاء مُعامِل العُمق <code>depth</code> ===
<syntaxhighlight lang="php">
<?php
<?php
// ترميز البيانات
// ترميز البيانات
سطر 127: سطر 119:
?>
?>


</syntaxhighlight>ينتج عن المثال السّابق ما يلي:<syntaxhighlight>
</syntaxhighlight>ينتج عن المثال السّابق ما يلي:<syntaxhighlight lang="text">
array(1) {
array(1) {
   [1]=>
   [1]=>
سطر 152: سطر 144:
Last error: JSON_ERROR_DEPTH
Last error: JSON_ERROR_DEPTH


</syntaxhighlight>
</syntaxhighlight>المثال 5: استخدام <code>()json_decode</code> مع أعداد صحيحة كبيرة<syntaxhighlight lang="php">
 
=== '''المثال 5:''' استخدام <code>()json_decode</code> مع أعداد صحيحة كبيرة ===
<syntaxhighlight lang="php">
<?php
<?php
$json = '{"number": 12345678901234567890}';
$json = '{"number": 12345678901234567890}';
سطر 164: سطر 153:
?>
?>


</syntaxhighlight>ينتج عن المثال السّابق ما يلي:<syntaxhighlight>
</syntaxhighlight>ينتج عن المثال السّابق ما يلي:<syntaxhighlight lang="text">
object(stdClass)#1 (1) {
object(stdClass)#1 (1) {
   ["number"]=>
   ["number"]=>
سطر 176: سطر 165:


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


تُستخدَم الدّالّة <code>[http://php.net/manual/en/function.json-last-error.php ()json_last_error]</code> لتحديد طبيعة الخطأ بالضّبط في حال فشل فك التّرميز.
تُستخدَم الدّالّة <code>[[PHP/json last error|()json_last_error]]</code> لتحديد طبيعة الخطأ بالضّبط في حال فشل فك التّرميز.


== سجل التغيرات ==
== سجل التغيرات ==
{| class="wikitable"
{| class="wikitable"
|الإصدار
!الإصدار
|الوصف
!الوصف
|-
|-
|7.1.0
|7.1.0
سطر 211: سطر 200:


== انظر أيضًا ==
== انظر أيضًا ==
* الدالة <code>[http://php.net/manual/en/function.json-encode.php json_encode()‎]</code>: إعادة قيمة ما على شكل صيغة JSON.
* الدالة <code>[[PHP/json encode|json_encode()‎]]</code>: إعادة قيمة ما على شكل صيغة JSON.
* الدالة <code>[http://php.net/manual/en/function.json-last-error.php json_last_error()‎]</code>: إعادة آخر خطأ حاصل.
* الدالة <code>[[PHP/json last error|json_last_error()‎]]</code>: إعادة آخر خطأ حاصل.


== مصادر ==
== مصادر ==
* [http://php.net/manual/en/function.json-decode.php صفحة الدالة json_decode في توثيق PHP الرسمي].
* [http://php.net/manual/en/function.json-decode.php صفحة الدالة json_decode في توثيق PHP الرسمي].
[[تصنيف:PHP]]
[[تصنيف:PHP Function]]
[[تصنيف:PHP JSON]]

المراجعة الحالية بتاريخ 02:46، 10 أبريل 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 للأنواع الأساسيّة.

انظر أيضًا

مصادر