javascript - Json 编码 数组与仅转换为数组的对象的混合

标签 javascript php arrays json

我的 php 函数返回一个数组,我使用

将其转换为 json

$req = json_encode($questionData);

然后将其传递给其他函数并解码 $res = json_decode($req);

它返回一个数组,其中包含数组格式的所有索引。 即使在请求数组 $questionData 中的某个索引上有对象,这些索引也应该在 jason 编码和解码执行后位于对象中。

我想获得包含 arrya 和对象数据混合的相同数组。

下面是请求数组

Array
(
    [success] => 1
    [pagename] => RC1_PGR_Questions
    [result] => Array
        (
            [CurrentInsuranceStatus] => Array
                (
                    [QuestionData] => Platform_Form_Page_Question Object
                        (
                            [_answer] => 
                            [_answerOptions] => Array
                                (
                                    [0] => Platform_Form_Page_Question_AnswerOption Object
                                        (
                                            [_answerKey] => 340280
                                            [_hideAnswer] => 1
                                            [_order] => 110
                                            [_promptText] => Yes
                                            [_value] => Y
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [1] => Platform_Form_Page_Question_AnswerOption Object
                                        (
                                            [_answerKey] => 340290
                                            [_hideAnswer] => 
                                            [_order] => 120
                                            [_promptText] => Yes, on parent's policy
                                            [_value] => Parents
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [2] => Platform_Form_Page_Question_AnswerOption Object
                                        (
                                            [_answerKey] => 340300
                                            [_hideAnswer] => 
                                            [_order] => 130
                                            [_promptText] => Yes, insured through employer
                                            [_value] => Company
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [3] => Platform_Form_Page_Question_AnswerOption Object
                                        (
                                            [_answerKey] => 340310
                                            [_hideAnswer] => 
                                            [_order] => 140
                                            [_promptText] => No, policy lapsed/expired
                                            [_value] => Lapsed
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [4] => Platform_Form_Page_Question_AnswerOption Object
                                        (
                                            [_answerKey] => 340320
                                            [_hideAnswer] => 
                                            [_order] => 150
                                            [_promptText] => No, never been insured
                                            [_value] => Never
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [5] => Platform_Form_Page_Question_AnswerOption Object
                                        (
                                            [_answerKey] => 340330
                                            [_hideAnswer] => 
                                            [_order] => 160
                                            [_promptText] => No, I didn't have a vehicle to insure
                                            [_value] => First
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [6] => Platform_Form_Page_Question_AnswerOption Object
                                        (
                                            [_answerKey] => 340340
                                            [_hideAnswer] => 
                                            [_order] => 170
                                            [_promptText] => No, been deployed/overseas in the military
                                            [_value] => Military
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [7] => Platform_Form_Page_Question_AnswerOption Object
                                        (
                                            [_answerKey] => 340350
                                            [_hideAnswer] => 
                                            [_order] => 180
                                            [_promptText] => No, other reason
                                            [_value] => Other
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                )

                            [_answersDivID] => html_CurrentInsuranceStatus
                            [_phoneAreaField] => 
                            [_attributeName] => CurrentInsuranceStatus
                            [_criteriaBasedQuestion] => 1
                            [_dateField] => 
                            [_eventHandler] => 
                            [_fieldType] => select
                            [_hideQuestion] => 1
                            [_monthField] => 
                            [_phoneNumberField] => 
                            [_order] => 10000
                            [_pageAttributes] => stdClass Object
                                (
                                    [additionalLabel] => 
                                    [answerStyle] => 
                                    [colNum] => 
                                    [colWidth] => 
                                    [cssclass] => 
                                    [defaultValue] => 
                                    [isMultiSelect] => 
                                    [maxLength] => 
                                    [min] => 
                                    [questionSkinStyle] => 
                                    [toolTip] => 
                                )

                            [_phonePreFixField] => 
                            [_questionDivID] => prompt_CurrentInsuranceStatus
                            [_questionKey] => 7169010
                            [_required] => 1
                            [_text] => Current insurance status
                            [_yearField] => 
                            [_errorLog] => Array
                                (
                                )

                        )

                )

        )

)

响应数组

stdClass Object
(
    [success] => 1
    [pagename] => RC1_PGR_Questions
    [result] => stdClass Object
        (
            [CurrentInsuranceStatus] => stdClass Object
                (
                    [QuestionData] => stdClass Object
                        (
                            [_answer] => 
                            [_answerOptions] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [_answerKey] => 340280
                                            [_hideAnswer] => 1
                                            [_order] => 110
                                            [_promptText] => Yes
                                            [_value] => Y
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [1] => stdClass Object
                                        (
                                            [_answerKey] => 340290
                                            [_hideAnswer] => 
                                            [_order] => 120
                                            [_promptText] => Yes, on parent's policy
                                            [_value] => Parents
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [2] => stdClass Object
                                        (
                                            [_answerKey] => 340300
                                            [_hideAnswer] => 
                                            [_order] => 130
                                            [_promptText] => Yes, insured through employer
                                            [_value] => Company
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [3] => stdClass Object
                                        (
                                            [_answerKey] => 340310
                                            [_hideAnswer] => 
                                            [_order] => 140
                                            [_promptText] => No, policy lapsed/expired
                                            [_value] => Lapsed
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [4] => stdClass Object
                                        (
                                            [_answerKey] => 340320
                                            [_hideAnswer] => 
                                            [_order] => 150
                                            [_promptText] => No, never been insured
                                            [_value] => Never
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [5] => stdClass Object
                                        (
                                            [_answerKey] => 340330
                                            [_hideAnswer] => 
                                            [_order] => 160
                                            [_promptText] => No, I didn't have a vehicle to insure
                                            [_value] => First
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [6] => stdClass Object
                                        (
                                            [_answerKey] => 340340
                                            [_hideAnswer] => 
                                            [_order] => 170
                                            [_promptText] => No, been deployed/overseas in the military
                                            [_value] => Military
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                    [7] => stdClass Object
                                        (
                                            [_answerKey] => 340350
                                            [_hideAnswer] => 
                                            [_order] => 180
                                            [_promptText] => No, other reason
                                            [_value] => Other
                                            [_errorLog] => Array
                                                (
                                                )

                                        )

                                )

                            [_answersDivID] => html_CurrentInsuranceStatus
                            [_phoneAreaField] => 
                            [_attributeName] => CurrentInsuranceStatus
                            [_criteriaBasedQuestion] => 1
                            [_dateField] => 
                            [_eventHandler] => 
                            [_fieldType] => select
                            [_hideQuestion] => 1
                            [_monthField] => 
                            [_phoneNumberField] => 
                            [_order] => 10000
                            [_pageAttributes] => stdClass Object
                                (
                                    [additionalLabel] => 
                                    [answerStyle] => 
                                    [colNum] => 
                                    [colWidth] => 
                                    [cssclass] => 
                                    [defaultValue] => 
                                    [isMultiSelect] => 
                                    [maxLength] => 
                                    [min] => 
                                    [questionSkinStyle] => 
                                    [toolTip] => 
                                )

                            [_phonePreFixField] => 
                            [_questionDivID] => prompt_CurrentInsuranceStatus
                            [_questionKey] => 7169010
                            [_required] => 1
                            [_text] => Current insurance status
                            [_yearField] => 
                            [_errorLog] => Array
                                (
                                )

                        )

                )



        )

)

最佳答案

所以在我意识到你真正想做的事情之后,我只是使用 serializeunserialize 作为 JSON 函数的替代品,如以下工作示例:

class testobj {

    public function __get($name) {
        if(isset($this->{$name}))
            return $this->{$name};
        return false;
    }

    public function __set($name,$val) {
        $this->{$name} = $val;
    }
}

$test = new testobj();
$test->testvar = "testval";

echo print_r($test,true);

/* Output:
testobj Object
(
    [testvar] => testval
)
*/

$test = serialize($test);
echo $test;

/* Output:
O:7:"testobj":1:{s:7:"testvar";s:7:"testval";}testobj Object
*/

$test = unserialize($test);

echo print_r($test,true);

/* Output:
testobj Object
(
    [testvar] => testval
)
*/

echo $test->testvar; // outputs "testval"

我认为 serialize()unserialize() 不如 JSON 解码/编码那么快(我从未对此进行过测试/基准测试),但它存储对象名称本身。我不知道它是否适用于具有方法的类/对象,但对于上面的数据它会起作用。也具有多维结构。

关于javascript - Json 编码 数组与仅转换为数组的对象的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36446773/

相关文章:

javascript - 使用 $.ajax 将 XML 发布到 MVC Controller 方法

php - Drupal 7 : Main menu not displaying child elements

javascript - 从 API 结果覆盖索引数组

iphone - 保存用户默认值时出现随机 BAD ACCESS

php - Javascript 确认删除 - 如果没有不提交表单?代码点火器

javascript - 从对象数组中查找对象索引的最佳方法是什么 - javascript

javascript - 在文档中查找、更新和返回数组对象 (mongodb)

javascript - 中心推特嵌入 iframe

javascript - 原型(prototype)继承 : Copying a function prototype to another

javascript - 将 AJAX 添加到 PHP 表单