تعلم ماهو JSON
ما هي JSON؟
كلمة JSON و تلفظ جيسون هي اختصار ل JavaScript Object Notation. سميت بهذا الاسم لأن لغة جافا سكربت(javascript) كانت أول لغة تستفيد من هذه الصيغة.
JSON هي طريقة لتخزين المصفوفات(arrays) و الكائنات(objects) بقيم نصية(string)، و تستخدم بشكل أساسي في نقل البيانات وأقل عرضة للخطر و أسهل من طرق آخرى كطريقة xml.
تستخدم عادةً عندما يطلب جزء من تطبيق الويب بعض المعلومات من الخادم(server) من دون إعادة تحميل الصفحة. عادة تتم هذه العملية عن طريق جافا سكربت وطلبات AJAX.
منذ النسخة 5.2.0، لغة PHP أصبحت قادرة على تحويل الكائنات والمصفوفات إلى JSON. وقد كانت إضافة رائعة لهذه اللغة.
إذا كنت تعمل مع PHP لفترة من الزمن ففي الغالب أنك قمت باستعمال دالة serialize () لعرض كائنات PHP كنصوص، و تستخدم لتحويل كائنات PHP إلى نصوص، و يمكنك فيما بعد استخدام دالة unserialize() لتحويل هذا النص إلى الحالة السابقة بالقيم الأصلية.
وليس فقط لغة PHP التي يمكن أن تتعامل مع JSON بل معظم لغات البرمجة يمكنها التعامل مع JSON وتحويل بياناتها إلى JSON.
لنبدأ تعلم JSON.
صيغة JSON
{"name":"Lushui","species":"Panda","diet":"Green Things","age":7,"colours":["red","brown","white"]}
افتراضيًا يتم تخزين JSON بلا أي فراغات (white space) مما يجعل قراءة JSON صعبة قليلًا، من أجل توفير الذاكرة عند نقل البيانات، لكن يمكنك أن تضع مهما كان من فراغات أو أسطر لجعلها مقروءة بالنسبة لك.
لكن هل من المعقول أن نقوم بوضع فراغات في هذ الملف يدويًا إذا كان لدينا العديد من الأسطر، هناك العديد من الأدوات التي تتوفر على الإنترنت التي تقوم بتجميل ملف JSON ليصبح أكثر قابلية للقراءة.
لنقم بإضافة بعض الفراغات:
{
"name": "Lushui",
"species": "Panda",
"diet": "Green Things",
"age": 7,
"colours": ["red", "brown", "white"]
}
كما ترى في هذا المثال أنه لدينا عدد من المفاتيح والقيم. كل مفتاح يجب أن تكون له قيمة مقابلة، إذا كنت قد تعاملت مع جافا سكربت من قبل فسوف ترى أن JSON لا تختلف كثيرًا عن جافا سكربت.
var lushui = {
name: 'Lushui',
species: 'Panda',
diet: 'Green Things',
age: 7,
colours: ['red', 'brown', 'white']
};
في جافا سكربت يتم تعيين هذا الكائن لمتغير كالتالي:
var lushui = { .. };
لكن JSON هي صيغة لنقل البيانات، وليست لغة برمجة، لا تملك أي مفاهيم برمجية لذلك لا نحتاج إلى المتغيرات أو ما شابه في JSON.
في جافا سكربت وفي JSON الكائنات يتم احتوائها داخل { } وكل مفتاح له قيمة، في جافا سكربت المفاتيح لا تتطلب وضعها بين إشارتي " " لأنها تمثل متغيرات.
في جافا سكربت و JSON المفتاح و قيمته يفصل بينهما بـ : و كل مفتاح و قيمته مفصولان عن المفاتيح و القيم الآخرى بـ “,” .
JSON تدعم أنواع القيم التالية.
Double
Float
String
Boolean
Array
Object
Null
القيم العددية تمثل بلا إشارتي " " ، القيم المنطقية تمثل بـ true أو false و بلا إشارتي " " كما PHP ، و يجب التشديد مرة أخرى أن النصوص تمثل بإشارتي " " .
القيمة null تعمل كعملها في php وتمثل في JSON بوضع الكلمة فقط غير محاطة بأي شيء.
المصفوفات في JSON وجافا سكربت هي نفسها.
// JavaScript
['red', 'brown', 'white']
["red", "brown", "white"]
لاحظ أنني لم أضع تعليق قبل المصفوفة الثانية، لأن JSON لا تدعم التعليق بسبب أنها تستخدم لنقل البيانات وليس هناك حاجة للتعليق لأنك لا تكتب أوامر برمجية لأنك لو عدت لملف JSON لاحقًا فكل ما فيه بيانات سوف تعرفها عند قراءتها مباشرةً.
JSON تدعم المصفوفات و الكائنات المتداخلة.
{
"an_object": {
"an_array_of_objects": [
{ "The": "secret" },
{ "is": "that" },
{ "I": "still" },
{ "love": "shoes!" }
]
}
}
لدينا في المثال السابق كائن JSON يحتوي كائن آخر يحتوي مصفوفة من الكائنات.
JSON و PHP
كما ذكرت سابقًا، منذ النسخة 5.2.0 وفرت الدعم لتحويل البيانات إلى JSON والآن سوف نلقي نظرة على هذه الميزة في PHP عن قرب.
لتحويل قيمة في PHP إلى JSON فقط نحتاج إلى دالة json_encode() كما التالي:
<?php
$truth = array('panda' => 'Awesome!');
echo json_encode($truth);
نتيجة تنفيذ التعليمات السابقة.
{"panda":"Awesome!"}
رائع هذا بالضبط ما كما نريده، لنقم الآن بتحويل هذه البيانات إلى مرة آخرى إلى صيغة مفهومة من قبل PHP.
<?php
$truth = json_decode('{"panda":"Awesome!"}');
echo $truth['panda'];
لنلقي نظرة على النتيجة؟
Fatal error: Cannot use object of type stdClass as array in ...
كما ترى، دالة json_decode() لا تتحول إلى مصفوفة PHP. بدلًا من ذلك تستخدم كائن stdClass لتمثيل بياناتنا، لنصل إلى بياناتنا بشكل صحيح سندخل إلى خصائص هذا الكائن بهذه الطريقة.
<?php
$truth = json_decode('{"panda":"Awesome!"}');
echo $truth->panda;
// Awesome!
لكن إذا ما زلت ترغب في الحصول على هذه البيانات كمصفوفة فقط أضف وسيط آخر إلى هذه الدالة وهو true.
<?php
$truth = json_decode('{"panda":"Awesome!"}', true);
echo $truth['panda'];
// Awesome!
ترجمة –وبتصرّف- للمقال Laravel 4 Primer: JSON لصاحبه Dayle Rees
كلمة JSON و تلفظ جيسون هي اختصار ل JavaScript Object Notation. سميت بهذا الاسم لأن لغة جافا سكربت(javascript) كانت أول لغة تستفيد من هذه الصيغة.
JSON هي طريقة لتخزين المصفوفات(arrays) و الكائنات(objects) بقيم نصية(string)، و تستخدم بشكل أساسي في نقل البيانات وأقل عرضة للخطر و أسهل من طرق آخرى كطريقة xml.
تستخدم عادةً عندما يطلب جزء من تطبيق الويب بعض المعلومات من الخادم(server) من دون إعادة تحميل الصفحة. عادة تتم هذه العملية عن طريق جافا سكربت وطلبات AJAX.
منذ النسخة 5.2.0، لغة PHP أصبحت قادرة على تحويل الكائنات والمصفوفات إلى JSON. وقد كانت إضافة رائعة لهذه اللغة.
إذا كنت تعمل مع PHP لفترة من الزمن ففي الغالب أنك قمت باستعمال دالة serialize () لعرض كائنات PHP كنصوص، و تستخدم لتحويل كائنات PHP إلى نصوص، و يمكنك فيما بعد استخدام دالة unserialize() لتحويل هذا النص إلى الحالة السابقة بالقيم الأصلية.
وليس فقط لغة PHP التي يمكن أن تتعامل مع JSON بل معظم لغات البرمجة يمكنها التعامل مع JSON وتحويل بياناتها إلى JSON.
لنبدأ تعلم JSON.
صيغة JSON
{"name":"Lushui","species":"Panda","diet":"Green Things","age":7,"colours":["red","brown","white"]}
افتراضيًا يتم تخزين JSON بلا أي فراغات (white space) مما يجعل قراءة JSON صعبة قليلًا، من أجل توفير الذاكرة عند نقل البيانات، لكن يمكنك أن تضع مهما كان من فراغات أو أسطر لجعلها مقروءة بالنسبة لك.
لكن هل من المعقول أن نقوم بوضع فراغات في هذ الملف يدويًا إذا كان لدينا العديد من الأسطر، هناك العديد من الأدوات التي تتوفر على الإنترنت التي تقوم بتجميل ملف JSON ليصبح أكثر قابلية للقراءة.
لنقم بإضافة بعض الفراغات:
{
"name": "Lushui",
"species": "Panda",
"diet": "Green Things",
"age": 7,
"colours": ["red", "brown", "white"]
}
كما ترى في هذا المثال أنه لدينا عدد من المفاتيح والقيم. كل مفتاح يجب أن تكون له قيمة مقابلة، إذا كنت قد تعاملت مع جافا سكربت من قبل فسوف ترى أن JSON لا تختلف كثيرًا عن جافا سكربت.
var lushui = {
name: 'Lushui',
species: 'Panda',
diet: 'Green Things',
age: 7,
colours: ['red', 'brown', 'white']
};
في جافا سكربت يتم تعيين هذا الكائن لمتغير كالتالي:
var lushui = { .. };
لكن JSON هي صيغة لنقل البيانات، وليست لغة برمجة، لا تملك أي مفاهيم برمجية لذلك لا نحتاج إلى المتغيرات أو ما شابه في JSON.
في جافا سكربت وفي JSON الكائنات يتم احتوائها داخل { } وكل مفتاح له قيمة، في جافا سكربت المفاتيح لا تتطلب وضعها بين إشارتي " " لأنها تمثل متغيرات.
في جافا سكربت و JSON المفتاح و قيمته يفصل بينهما بـ : و كل مفتاح و قيمته مفصولان عن المفاتيح و القيم الآخرى بـ “,” .
JSON تدعم أنواع القيم التالية.
Double
Float
String
Boolean
Array
Object
Null
القيم العددية تمثل بلا إشارتي " " ، القيم المنطقية تمثل بـ true أو false و بلا إشارتي " " كما PHP ، و يجب التشديد مرة أخرى أن النصوص تمثل بإشارتي " " .
القيمة null تعمل كعملها في php وتمثل في JSON بوضع الكلمة فقط غير محاطة بأي شيء.
المصفوفات في JSON وجافا سكربت هي نفسها.
// JavaScript
['red', 'brown', 'white']
["red", "brown", "white"]
لاحظ أنني لم أضع تعليق قبل المصفوفة الثانية، لأن JSON لا تدعم التعليق بسبب أنها تستخدم لنقل البيانات وليس هناك حاجة للتعليق لأنك لا تكتب أوامر برمجية لأنك لو عدت لملف JSON لاحقًا فكل ما فيه بيانات سوف تعرفها عند قراءتها مباشرةً.
JSON تدعم المصفوفات و الكائنات المتداخلة.
{
"an_object": {
"an_array_of_objects": [
{ "The": "secret" },
{ "is": "that" },
{ "I": "still" },
{ "love": "shoes!" }
]
}
}
لدينا في المثال السابق كائن JSON يحتوي كائن آخر يحتوي مصفوفة من الكائنات.
JSON و PHP
كما ذكرت سابقًا، منذ النسخة 5.2.0 وفرت الدعم لتحويل البيانات إلى JSON والآن سوف نلقي نظرة على هذه الميزة في PHP عن قرب.
لتحويل قيمة في PHP إلى JSON فقط نحتاج إلى دالة json_encode() كما التالي:
<?php
$truth = array('panda' => 'Awesome!');
echo json_encode($truth);
نتيجة تنفيذ التعليمات السابقة.
{"panda":"Awesome!"}
رائع هذا بالضبط ما كما نريده، لنقم الآن بتحويل هذه البيانات إلى مرة آخرى إلى صيغة مفهومة من قبل PHP.
<?php
$truth = json_decode('{"panda":"Awesome!"}');
echo $truth['panda'];
لنلقي نظرة على النتيجة؟
Fatal error: Cannot use object of type stdClass as array in ...
كما ترى، دالة json_decode() لا تتحول إلى مصفوفة PHP. بدلًا من ذلك تستخدم كائن stdClass لتمثيل بياناتنا، لنصل إلى بياناتنا بشكل صحيح سندخل إلى خصائص هذا الكائن بهذه الطريقة.
<?php
$truth = json_decode('{"panda":"Awesome!"}');
echo $truth->panda;
// Awesome!
لكن إذا ما زلت ترغب في الحصول على هذه البيانات كمصفوفة فقط أضف وسيط آخر إلى هذه الدالة وهو true.
<?php
$truth = json_decode('{"panda":"Awesome!"}', true);
echo $truth['panda'];
// Awesome!
ترجمة –وبتصرّف- للمقال Laravel 4 Primer: JSON لصاحبه Dayle Rees
التعليقات على الموضوع