زمانی که در حال انکود کردن آبجکت های php به json هستیم، تمام ویژگی‌های  آبجکت ها به صورت آبجکت های json انکود خواهند شد.
ویژگی json به ما اجازه ی رجوع از آبجکت را نمی دهد.پس باید دقت کرد تا آبجکت هایی که رجوع های بازگشتی دارند را انکود نکنیم. برای چک کردن این موضوع کامپوننت های Zend\Json\Json::encode() و Zend\Json\Encoder::encode() از طریق آرگومان دومی بازگشتی بودن آبجکت ها را چک می‌کنند و اگر یک آبجکت دو بار مرتب شده باشد، استثناء در نظر گرفته می شود.

دیکود کردن آبجکت های json مشکلی را بوجود می آورد. از آونجایی که آبجکت های جاوا اسکریپت بیشترین مطابقت را با آرایه های انجمنی php دارند. بعضی ها پیشنهاد می کنند که هنگام ساخت یک آبجکت از کلاس‌ها با متغیر های کلید/مقدار (key/value) آبجکت های json ساخته شوند. اما برخی دیگه اعتقاد دارند که اینکار باعث بوجود آمدن خطرات امنیتی قابل توجهی می شه.
در حالت پیش فرض،Zend\Json\Json آبجکت های json رو بعنوان آبجکت های stdClass دیکود می کنه، اگر شما می‌خواهید که یک آرایه انجمنی را برگردانید می تونید به این صورت عمل کنید:

// Decode JSON objects as PHP array
$phpNative = Zend\Json\Json::decode($encodedValue, Zend\Json\Json::TYPE_ARRAY);

بنابراین، آبجکت های دیکود شده به صورت آرایه انجمنی با کلید ها و مقدارهای مطابق با key/value در نشانه گذاری json برگردانده می شود.
فریمورک zend پیشنهاد می‌کند آبجکت های Json رو خود توسعه‌دهنده تصمیم بگیرد که چگونه دیکود کند، پس اگر نیاز هستش یک آبجکت با نوعی خاص ساخته شود اینکار توسط خود توسعه‌دهنده انجام گیرد و از طریق مقادیر دیکود در Zend\Json آشغال شود.
انکود کردن آبجکت های php:
اگر می‌خواهید کدها رو به صورت پیش‌فرض انکود کنید مکانیزم انکودینگ به  ویژگی‌های عمومی آبجکت ها دسترسی خواهد داشت. وقتی متد toJson روی یک آبجکت برای انکود اعمال می شه، Zend\Json\Json این متد رو صدا می زنه و انتظار می ره که آبجکت ساخته شده ارائه ای از حالت‌های داخلی آبجکت به صورت json رو برگردونه. Zend\Json\Json می تونه آبجکت های php رو به صورت بازگشتی برگردونه اما اینکار به صورت پیش‌فرض انجام نمی شه. اینکار از طریق پاس دادن مقدار true  به عنوان دومین آرگومان Zend\Json\Json::encode() انجام میشه:

// Encode PHP object recursively
$jsonObject = Zend\Json\Json::encode($data, true);

زمانی که در حال انکود کردن آبجکت ها به صورت بازگشتی هستیم، json چرخه ها رو پشتیبانی نمی کنه و یک Zend\Json\Exception\RecursionException بوجود می آید. اگر مایل هستید می‌توانید این exception رو ساکت کنید و اینکار از طریق پاس دادن silenceCyclicalExceptions به عنوان یک آپشن انجام میشه:

$jsonObject = Zend\Json\Json::encode(
    $data,
    true,
    array('silenceCyclicalExceptions' => true)
);

انکودر و دیکودر های داخلی:
Zend\Json دو متد متفاوت بر اساس اینکه ext/json در نصب php شما فعال شده یا نه رو داره.اگر این ویژگی نصب شده باشه متد های json_encode() و json_decode() در انکود و دیکود کردن کدهای شما به کار می روند. اما اگر نصب نباشه، خود فریمورک zend در کد php استفاده می شه تا اینکار رو انجام بده. روش دوم کمی کند تره اما نتیجه یکی خواهد بود.
اما بعضی مواقع نیاز داریم که از روش دوم یعنی انکود و دیکود داخلی استفاده کنیم:

Zend\Json\Json::$useBuiltinEncoderDecoder = true;

expression های json:
جاوا اسکریپت از توابع callback به صورت سنگینی استفاده می کنه،‌ که از طریق متغیر های آبجکت json از این امر کاسته می شه.با اینحال در صورتی اینکار رو انجام میده که داخل single quote برگردونده نشوند. کاری که Zend\Json انجام میده.با پشتیبانی expression از طریق Zend\Json می تونیم آبجکت های انکود شده توسط json رو با callback های معتبر جاوا اسکریپت پشتیبانی کنیم.این ویژگی برای هر دو حالت انکود کردن قابل استفاده است.
یک callback جاوا اسکریپت از طریق آبجکت Zend\Json\Expr ارائه می شه.اینکاربا الگوی مقدار آبجکت پیاده‌سازی میشه و تغییر ناپذیر هم هست. شما می‌توانید expression های جاوااسکریپت رو بعنوان اولین آرگومان تابع consructor خودتون تعریف کنید. به صورت پیش فرض، Zend\Json\Json::encode ، callback های جاوا اسکریپت رو انکود نمی کنه. شما باید آپشن enableJsonExprFinder رو نیز پاس بدید و مقدار true رو درون تابع انکود ست کنید. اینکار قابلیت پشتیبانی expression رو برای تمامی expression های تو در تو، در ساختارهای پیچیده‌تر آبجکت فعال می کنه. یک مثال می تونه مانند زیر باشه:

$data = array(
    'onClick' => new Zend\Json\Expr('function() {'
              . 'alert("I am a valid JavaScript callback '
              . 'created by Zend\Json"); }'),
    'other' => 'no expression',
);
$jsonObjectWithExpression = Zend\Json\Json::encode(
    $data,
    false,
    array('enableJsonExprFinder' => true)
);