解码稀疏 json 对象到 php 数组

2022-08-30 18:59:01

我可以使用以下命令创建一个稀疏的php数组(或map):

$myarray = array(10=>'hi','test20'=>'howdy');

我想将其序列化/反序列化为JSON。我可以使用以下命令序列化它:

$json = json_encode($myarray);

这将产生字符串 .但是,当我反序列化它并使用命令将其转换为数组时:{"10":"hi","test20":"howdy"}

$mynewarray = (array)json_decode($json);

我似乎丢失了任何与不是有效php标识符的键的映射。也就是说,具有 映射 ,但不是 也不是 。mynewarray'test20'=>'howdy'10=>'hi''10'=>'hi'

有没有办法在使用标准/函数转换到json时保留php映射中的数字键?json_encodejson_decode

(我使用的是 PHP 版本 5.2.10-2ubuntu6.4。


答案 1

json_decode默认情况下返回 stdClass 类型的对象。您可以作为属性访问成员(即 )。 不是属性的有效名称,这就是您丢失它的原因。$result->test2010

您可以不强制转换为数组,而是作为第二个参数传递给,以使其返回关联数组本身:truejson_decode

$mynewarray = json_decode($json, true);

如果你这样做,将工作正常。$mynewarray[10]


答案 2

什么版本的 PHP?在 5.2 上,以下程序/脚本

$myarray = array(10=>'hi','test20'=>'howdy');
$json = json_encode($myarray);
$mynewarray = (array) json_decode($json);
var_dump($mynewarray);

输出

array(2) {
  ["10"]=>
  string(2) "hi"
  ["test20"]=>
  string(5) "howdy"
}

这不会显示您描述的行为。

也就是说,如果您的 PHP 版本错误地转换了 JSON,请尝试在json_decode返回的 stdClass 对象上使用get_object_vars

get_object_vars(json_decode($json))

这可能会带来更好的结果。


推荐