将多维数组转换为json

时间:2014-02-26 13:37:31

标签: php mysql arrays json

这是我的多维数组..我知道如何将数组编码为json但没有得到实际的json预期的json结果

array (
  1 => 
  array (
    'text' => 'Dashboard',
    'spriteCssClass' => 'rootfolder',
    'expanded' => 'true',
    'id' => '1',
    'item_name' => 'Dashboard',
    'menu_type' => 'item',
    'parent' => '0',
    'items' => 
    array (
      9 => 
      array (
        'text' => 'Application',
        'spriteCssClass' => 'html',
        'id' => '9',
        'item_name' => 'Application',
        'menu_type' => 'header',
        'parent' => '1',
        'items' => 
        array (
        ),
      ),
    ),
  ),
)

将其编码为json后,我得到以下结果 for encodin我使用了json_encode($array);

{
    "1": {
        "text": "Dashboard",
        "spriteCssClass": "rootfolder",
        "expanded": "true",
        "id": "1",
        "item_name": "Dashboard",
        "menu_type": "item",
        "parent": "0",
        "items": {
            "9": {
                "text": "Application",
                "spriteCssClass": "html",
                "id": "9",
                "item_name": "Application",
                "menu_type": "header",
                "parent": "1",
                "items": {}
            }
            }}}

我想要以下编码的json

{
                "text": "Dashboard",
        "spriteCssClass": "rootfolder",
        "expanded": "true",
        "id": "1",
        "item_name": "Dashboard",
        "menu_type": "item",
        "parent": "0",
        "items": [
             {
                "text": "Application",
                "spriteCssClass": "html",
                "id": "9",
                "item_name": "Application",
                "menu_type": "header",
                "parent": "1",
                "items": {}
             }]
            }

我几乎尝试了一切,但没有得到我预期的json结果 我想从json中删除数组索引,如“1”{并且还要在每个项目之后添加“[”这个:列

3 个答案:

答案 0 :(得分:1)

看起来你只想json_encode($yourData[1])而不只是json_encode($yourData) ...

答案 1 :(得分:1)

您的数组未被索引,因此json_encode假定它是一个关联数组。

如果你为数组编制索引,你应该得到预期的结果,或者甚至可以完全删除索引赋值:

array (
  array (
    'text' => 'Dashboard',
    'spriteCssClass' => 'rootfolder',
    'expanded' => 'true',
    'id' => '1',
    'item_name' => 'Dashboard',
    'menu_type' => 'item',
    'parent' => '0',
    'items' => 
    array (
      9 => 
      array (
        'text' => 'Application',
        'spriteCssClass' => 'html',
        'id' => '9',
        'item_name' => 'Application',
        'menu_type' => 'header',
        'parent' => '1',
        'items' => 
        array (
        ),
      ),
    ),
  ),
)

EDIT ***

删除所有数字索引/将所有“非关联”转换为正常使用:

function normaliseArray($arr,$recurse=True) {
    if (!is_array($arr))
       return $arr;

    if (count(array_filter(array_keys($arr), 'is_numeric')) == count($arr))
      $arr = array_values($arr);

    if ($recurse) {
      foreach($arr as $k => $a) {
        $arr[$k] = normaliseArray($a,$recurse);
      }
    }

    return $arr;
  }


json_encode(normaliseArray($array));

试试。

答案 2 :(得分:0)

json_encode将按原样对其进行编码。您可以做的最好的事情是强制数组从0开始,这与[]相同:

$array = array_values($array);
$array[0]['items'] = array_values($array[0]['items']);