如何在 PHP 中 JSON 编码/解码后维护对象状态

Posted

技术标签:

【中文标题】如何在 PHP 中 JSON 编码/解码后维护对象状态【英文标题】:How to maintain object state after JSON Encode/Decode in PHP 【发布时间】:2019-09-01 10:02:28 【问题描述】:

以下方法将对象中的属性实例更改为数组,但要求不同,操作后响应的结果将是相同的。

<?php

$data =  array('statusCode'=>200,
               'statusDescripion'=>'success',
               'data'=> array('companyImage'=>new StdClass(),
               'profile'=>array())
              );

echo "<br><br> Encoded data coming from API<br>";
echo $encodeData = json_encode($data,true);

//echo "<br><br> Decode data for Manipulation <br>";
$decodeData = json_decode($encodeData,true);
//print_r($decodeData);
if($decodeData['statusCode'] == 200)
    $data_ = array('statusCode'=>$decodeData['statusCode'],
                   'statusDescripion'=>$decodeData['statusDescripion'],
                   'data'=>$decodeData['data'],
                   'url'=>"php.com");


echo "<br><br> After Manipulation <br>";
echo json_encode($data_,true);

【问题讨论】:

您可以通过在json_decode 中传递 true 将其更改为 PHP 中的数组,因此您需要手动将其更改回来,或者不传递 true,并通过访问属性来更新值而不是数组键。顺便说一句,json_encode 中的 true 是怎么回事? 【参考方案1】:

来自json-decode 文档:

当为 TRUE 时,返回的对象将被转换为关联数组

您使用它以便将对象转换为数组 - 如果您希望它成为对象(又名 ),只需从该行中删除 true

$decodeData = json_decode($encodeData,true);

收件人:

$decodeData = json_decode($encodeData);

顺便说一句,json-encode 没有得到true 作为第二个参数,我想你想要JSON_FORCE_OBJECT

【讨论】:

以上是关于如何在 PHP 中 JSON 编码/解码后维护对象状态的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中访问 JSON 元素

jsoncpp 解码编码 中文为空 乱码问题

php JSON编码和解码 - PHP

如何解码json消息

2018-04-09(JSON.parse和JSON.stringify的编码解码)

在 Swift iOS 中解码的 PHP JSON 返回空值