在json_encode中对数组进行编码时,json_decode输出一个对象

时间:2018-06-19 13:21:30

标签: php encoding decoding

我正在使用json_ecnode,后来在PHP中使用json_decode。 由于某种原因,即使我使用json_encode编码数组,它也始终在json_decode解码后作为对象出现。

我无法控制json_decode部分,因为其他一些系统正在对其进行解码和使用。 我是处理编码部分的人。 我该怎么做才能将其解码为数组?

下面是示例代码:

$types = array(
'aa1' => array('type' => 'document/unknown', 'icon' => 'unknown'),
'aa2' => array('type' => 'video/quicktime', 'icon' => 'quicktime', 'groups' => array('video'), 'string' => 'video') 
);

var_dump($types);

$typesencoded = json_encode($types);
var_dump($typesencoded);

$typesdecoded = json_decode($typesencoded);
var_dump($typesdecoded);

这是输出:

/tests/test.php:28:array (size=2)
  'aa1' => 
    array (size=2)
      'type' => string 'document/unknown' (length=16)
      'icon' => string 'unknown' (length=7)
  'aa2' => 
    array (size=4)
      'type' => string 'video/quicktime' (length=15)
      'icon' => string 'quicktime' (length=9)
      'groups' => 
        array (size=1)
          0 => string 'video' (length=5)
      'string' => string 'video' (length=5)

/tests/test.php:35:string '{"aa1":{"type":"document\/unknown","icon":"unknown"},"aa2":{"type":"video\/quicktime","icon":"quicktime","groups":["video"],"string":"video"}}' (length=142)

/tests/test.php:40:
object(stdClass)[78]
  public 'aa1' => 
    object(stdClass)[77]
      public 'type' => string 'document/unknown' (length=16)
      public 'icon' => string 'unknown' (length=7)
  public 'aa2' => 
    object(stdClass)[79]
      public 'type' => string 'video/quicktime' (length=15)
      public 'icon' => string 'quicktime' (length=9)
      public 'groups' => 
        array (size=1)
          0 => string 'video' (length=5)
      public 'string' => string 'video' (length=5)

3 个答案:

答案 0 :(得分:1)

解码时,将第二个参数传递为TRUE。第二个参数采用布尔值,即TRUE / FALSE,如果为TRUE,则返回一个assoc数组;如果为FALSE,则返回一个对象。 更改

$typesdecoded = json_decode($typesencoded);

$typesdecoded = json_decode($typesencoded,TRUE);

答案 1 :(得分:0)

关联* PHP数组只能编码为JSON 对象,但是JSON对象可以解码为关联数组 PHP对象。您可以使用json_decode的第二个参数来控制您的偏好。您无法在编码方面控制结果,而需要在解码方面进行控制。

*(非连续数字索引数组)

另一种选择是,编码端提供一些编码为JSON数组([...])的内容,而JSON数组只能解码为PHP数组。

答案 2 :(得分:-1)

这就是为我解决的问题:

    $types = array(
     (object)array(
         'extension' => 'aa1',
         'icon' => 'unknown',
         'type' => 'document/unknown',
         'customdescription' => ''
     ),

    (object)array(
        'extension' => 'aa2',
        'icon' => 'quicktime',
        'type' => 'video/quicktime',
        'groups' => array('video'), 'string' => 'video'
    ),      
);

$typesencoded = json_encode($types);