How to change this JSON object?

Asked

Viewed 469 times

6

I’ve had the following problem for a few days: I’m using Cakephp and sending JSON to a datagrid of Easyui as follows:

$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)
                                 )
    )
); 

But my biggest problem is that it’s being sent this way:

{
    "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
}

But the datagrid Easyui can only load if the data have been like this:

{
    "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 sends as object but I’m not able to handle it in Javascript to change it after receiving or in php cake before sending. Somebody got some advice there?

The datagrid no secret:

 $(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'}
        ]]
    });
});

1 answer

3


Looking at the documentation of .map() It seems to me you can do so in Cakephp:

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

Unfortunately I don’t have anywhere to test, but what you need is to iterate this array and on each element of the array replace ["Produto":{}} by the interior object with the key "Produto".

Browser other questions tagged

You are not signed in. Login or sign up in order to post.