Php反序列化了一个序列化的json字符串

时间:2017-07-24 20:51:33

标签: php

在c#中的一个http帖子到php后得到表单的输出    在我有的代码

    public function actionSubmitInspection(){
       $data = $_POST;

        return (array)$data["check_comments"];

    }

现在我得到了表格的结果

[
 "[{\"id\":26,\"comment\":\"89oiu\"},{\"id\":27,\"comment\":\"comment 2\"}]"
]

从我的尝试类型转换数组不创建数组,如何将序列化字符串转换为数组或对象。

3 个答案:

答案 0 :(得分:1)

使用json_decode函数。

write-verbose

Out put将是对象数组。

public function actionSubmitInspection(){
       $data = $_POST;
        // replace it
        //return (array)$data["check_comments"];
        return json_decode($data["check_comments"]);

    }

答案 1 :(得分:1)

  

从我的尝试类型转换数组不创建数组

是的,它会创建一个数组,但它创建的数组包含JSON文本。

您需要解析JSON以恢复其编码的数据结构。 PHP为此提供了函数json_decode()。我建议您将TRUE作为第二个参数传递给json_decode()以获取数组(否则它会创建stdClass个对象,这些对象只是具有奇特语法和有限处理选项的数组。

// Assuming the value of $data['check_comments'] is:
// "[{\"id\":26,\"comment\":\"89oiu\"},{\"id\":27,\"comment\":\"comment 2\"}]"
$output = json_decode($data['check_comments']);

print_r($output);

输出:

Array
(
    [0] => Array
        (
            [id] => 26
            [comment] => 89oiu
        )
    [1] => Array
        (
            [id] => 27
            [comment] => comment 2
        )
)

答案 2 :(得分:1)

您应该使用json_decode($data["check_comments"])输出将是 stdClass对象数组

Array
(
    [0] => stdClass Object
        (
            [id] => 26
            [comment] => 89oiu
        )

    [1] => stdClass Object
        (
            [id] => 27
            [comment] => comment 2
        )

)

或在第二个参数true上传递json_decode($data["check_comments"], true),输出将是数组

Array
(
    [0] => Array
        (
            [id] => 26
            [comment] => 89oiu
        )

    [1] => Array
        (
            [id] => 27
            [comment] => comment 2
        )

)