json
برای تبدیل آرایه به رشته میتوانید از متد های packages\base\json
استفاده کنید . دو تابع که یکی برای تبدیل آرایه به رشته و دیگری برای تبدیل رشته json به آرایه استفاده میشود .
متد ها را میتوانید بدون هیچ نگرانی در هم ریختگی برای آرایه و یا رشته های زبان فارسی استفاده کنید .
تبدیل آرایه به رشته
برای تبدیل یک آرایه به رشته (برای امور مختلف مانند ذخیره در پایگاه داده) باید از تابع encode
استفاده کنید . این تابع در آرگومان اول یک مقدار از هر جنسی دریافت میکند و در آرگومان دوم ثابتهای مربوط به json_encode که در php تعریف شده است را دریافت میکند. (آرگومان دوم اختیاریاست.) خروجی این متد یک رشته خواهد بود.
json\encode($input, $option);
مثال
<?php
namespace packages\packagename\controllers;
use packages\base\{Controller, Json};
class Test extends Controller {
public function encodeArray(){
$array = array("a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5);
try {
echo json\encode($array);
echo json\encode($array, JSON_PRETTY_PRINT);
/* output
{"a":1,"b":2,"c":3,"d":4,"e":5}
{
"a": 1,
"b": 2,
"c": 3,
"d": 4,
"e": 5
}
*/
}catch(Json\JsonException $e) {
echo "JsonException: {$e->getMessage()}";
}
}
}
تبدیل رشته json به آرایه
برای تبدیل یک رشته (که باید حتما این رشته از نوع json باشد) باید از متد decode
استفاده کنید . این متد در پارامتر اول یک رشته دریافت میکند . در صورتی که مقدار دوم این تابع را برابر true
قرار دهید، خروجی تابع یک آرایه و در غیر اینصورت یک شئ خواهد بود .
json\decode(string);
مثال
<?php
namespace packages\packagename\controllers;
use packages\base\{Controller, Json};
class Test extends Controller {
public function decodeJson(){
$json = {"a":1, "b":2, "c":3, "d":4, "e":5};
try {
var_dump(json\decode($json));
var_dump(json\decode($json, true));
/* output
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)
}
*/
}catch(Json\JsonException $e) {
echo "JsonException: {$e->getMessage()}";
}
}
}
استثنا JsonException
زمان کار با کلاس Json ممکن است عملیات encode\decode کردن داده بدرستی انجام نشود (مم کن است ورودی اشتباه بوده و یا گاها روند عملیات بدرستی پیش نرود) و باعث بروز خطا شود؛ در اینصورت استثنا از جنس packages\base\json\JsonException پرتاب میشود.
فراخوانی متد getMessage()
روی شئ JsonException علت خطای بوجود آماده را برمیگرداند.
مثال
<?php
namespace packages\packagename\controllers;
use packages\base\{Controller, Json};
use packages\packagename\Question as Model;
class Questions extends Controller {
public function insert(){
$inputRules = [
'question' => [
'type' => 'string'
],
'options' => []
];
$this->response->setStatus(false);
$inputs = $this->checkinputs($inputRules);
$options = [];
try {
foreach($inputs['options'] as $key => $row){
$options[] = [
'label' => $row,
'value' => $key
];
}
$options = Json\encode($option);
$question = new Model();
$question->question = $inputs['question'];
$question->options = $options;
$question->save();
$this->response->setStatus(true);
}catch(Json\JsonException $e) {
echo "JsonException: {$e->getMessage()}";
}
return $this->response;
}
}