PHP - json编码/解码过程将关联数组转换为对象

时间:2015-07-02 15:39:25

标签: php json serialization associative-array

我需要将php变量存储到文件中,所以我决定序列化或jsonize(也许是jsonify XD)。
出于便携性目的,我更喜欢json解决方案...
在测试期间,我注意到关联数组被json解码为对象,我不能将它用作关联数组,但我必须用作对象。
非关联数组被正确地json解码为非关联数组。
我做错了什么? 或者这只是php json函数的正常行为

这里是示例代码

$test = array("test1" => 1, "test2" => 2);

$json = json_decode(json_encode($test));

$serialize = unserialize(serialize($test));

//output -> stdClass::__set_state(array( 'test1' => 1, 'test2' => 2, ))
// cant access  to $json["test1"] as in $test but $json->test why?????
var_export($json);

//ouptut -> array ( 'test1' => 1, 'test2' => 2, )
//here i can $serialize["test1"] 
var_export($serialize);

3 个答案:

答案 0 :(得分:1)

你试过json_decode($test, true)吗?

答案 1 :(得分:0)

您可以设置第二个参数。如果为TRUE,则返回的对象将转换为关联数组。 http://php.net/manual/en/function.json-decode.php

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>

输出:

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)
}

答案 2 :(得分:0)

是的,我已经用它了...

如果我使用json_decode($test, true)工作在关联数组但不适用于对象导致原始对象将被解码为数组...

所以问题是我必须将解码变量作为原始变量(对于这两种情况)。

我编码我的变量,然后存储在一个文件然后解码,我必须以访问原始的相同方式访问它们,所以如果原始是关联数组我必须访问它作为关联数组x["field"],如果原始变量是我必须作为对象x->field访问的对象。

序列化完成工作,json no,这就是我的担忧......也许json不是为了那个目的而想到的?