Как изменить этот объект JSON?


Я несколько дней назад с следующей проблемой: Я использую CakePHP и, отправив JSON datagrid EasyUI следующим образом:

$rows = $this->Produto->find('all', array('fields' => array(
   'id', 'codigo_produto', 'codigo_pedido'
)));
$total = $this->Produto->find('count');
return new CakeResponse(
    array('type' => 200,
          'body' =>  json_encode(array('rows' => $rows,
                                       'total' => $total)
                                 )
    )
); 

Но моя самая большая проблема в том, что он отправлен следующим образом:

{
    "rows": [
        {
            "Produto": {
                "id": "28",
                "codigo_produto": "01.02.00.0001",
                "codigo_pedido": "123521"
            }
        },
        {
            "Produto": {
                "id": "29",
                "codigo_produto": "",
                "codigo_pedido": ""
            }
        },
        {
            "Produto": {
                "id": "30",
                "codigo_produto": "03.02.01.0000",
                "codigo_pedido": "12351"
            }
        },
        {
            "Produto": {
                "id": "31",
                "codigo_produto": "02.01.00.2541",
                "codigo_pedido": "12351"
            }
        }
    ],
    "total": 4
}

, Но datagrid EasyUI можете загрузить, если data я так:

{
    "rows": [
        {
            "id": "28",
            "codigo_produto": "01.02.00.0001",
            "codigo_pedido": "123521"
        },
        {
            "id": "29",
            "codigo_produto": "",
            "codigo_pedido": ""
        },
        {
            "id": "30",
            "codigo_produto": "03.02.01.0000",
            "codigo_pedido": "12351"
        },
        {
            "id": "31",
            "codigo_produto": "02.01.00.2541",
            "codigo_pedido": "12351"
        }
    ],
    "total": 4
}

Cake отправляет как объект, но я не в состоянии обработать в Javascript, но он изменить после получения или в php cake перед отправкой. У кого-то есть какие-то советы ai?

datagrid не имеет секрет:

 $(function () {
    $('#dg').datagrid({
        url: '<?php echo $this->Html->url(array('action' => 'get_data')); ?>',
        pagination: true,
        columns: [[
            {field: 'id', title: 'id', width: 100},
            {field: 'codigo_produto', title: 'codigo produto', width: 100},
            {field: 'codigo_pedido', title: 'codigo pedido', width: 100, align: 'center'}
        ]]
    });
});
Author: Renan Gomes, 2015-09-29

1 answers

Глядя на документацию .map() мне кажется, что вы можете сделать это в CakePHP:

$collection = new Collection($rows);
$new = $collection->map(function ($value, $key) {
    return $value["Produto"];
});
$result = $new->toArray();

Infelismente не имею, где проверить, но все, что вам нужно будет перебирать этот массив и каждый элемент массива заменить ["Produto":{}} объектом интерьера с ключом "Produto".

 3
Author: Sergio, 2015-09-29 14:23:45