Foros del Web » Programando para Internet » PHP »

Pasar un JSON Array a JSON Object

Estas en el tema de Pasar un JSON Array a JSON Object en el foro de PHP en Foros del Web. Hola gente, Tengo una función que me devuelve información de la siguiente forma: Código: [ { "id": "xxx", "asset_id": "xxx", "cat_id": "xx", }, { "id": ...
  #1 (permalink)  
Antiguo 18/09/2013, 08:54
 
Fecha de Ingreso: julio-2010
Mensajes: 134
Antigüedad: 14 años, 4 meses
Puntos: 0
Pasar un JSON Array a JSON Object

Hola gente,

Tengo una función que me devuelve información de la siguiente forma:
Código:
[
    {
        "id": "xxx",
        "asset_id": "xxx",
        "cat_id": "xx",
    },
    {
        "id": "xxx",
        "asset_id": "xxx",
        "cat_id": "xx",

    }
]
Según he mirado en: http://www.androidhive.info/2012/01/...sing-tutorial/

LA diferencia entre un Json Array y un JSON object es que el Json array esta envuelto en [], mientras que el Object esta en {}.
Si esto es correcto, yo lo que quiero devolver esa información en un Object, según entiendo, tal y como esta pero que lo que encierra a los objetos json, sea otro objeto json en si.
Esto es correcto?

Quiero hacerlo, por que luego lo trato con una App android y es mas eficiente que sea un objeto y no un array, pero no estoy seguro aun tengo que probarlo.

Que tendría que hacer para que fuera un object lo que devuelve?
En caso de que no se pueda, también me valdría encerrar el array en un object.

Un saludo y gracias

Pd: Lo que yo hice para crear eso fue:
Código PHP:
$result[] = new stdClass();


// esta tres líneas metidas en un bucle.
$result[$i]->id $row "id" ];
$result[$i]->asset_id $row "asset_id" ];
$result[$i]->cat_id_id $row "cat_id" ]; 

Gracias
  #2 (permalink)  
Antiguo 18/09/2013, 09:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Pasar un JSON Array a JSON Object

Si lo quieres en objeto, con la función json_encode y json_decode solo es cuestión de usar el segundo parametro e indicarle que lo quieres como objeto. Ejemplo tomado de la página oficial
Código PHP:
Ver original
  1. echo "Empty array output as array: ", json_encode($b), "\n";
  2. echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";
Si quieres trabajar con una clase puedes usar Zend_Json que también tiene varios métodos para trabajar con json.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 18/09/2013, 09:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Pasar un JSON Array a JSON Object

¿Necesitas algo así?
Cita:
{ "foo": [
{
"id": "xxx",
"asset_id": "xxx",
"cat_id": "xx",
},
{
"id": "xxx",
"asset_id": "xxx",
"cat_id": "xx",

}
] }
Porque de cualquier forma es necesario el array que almacena a los sub-objetos, si lo piensas eso es una colección y es inevitable hacer uso de un array para ello.

Una forma aún peor de hacerlo sería así:
Cita:
{
"0": {
"id": "xxx",
"asset_id": "xxx",
"cat_id": "xx",
},
"1": {
"id": "xxx",
"asset_id": "xxx",
"cat_id": "xx",
}
}
Y eso parece que toma forma de un horripilante array-object, lo cual es una blasfemia al diseño de JSON per se.

Tu código original está bien, si lo necesitas meter en otro objeto está bien siempre y cuando uses algún índice válido. A decir verdad no entiendo por que quieres alterar un estructura que es aparentemente correcta, y sin explicar más contexto no podemos deducir más.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 18/09/2013, 09:18
 
Fecha de Ingreso: julio-2010
Mensajes: 134
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Pasar un JSON Array a JSON Object

Sobre la primera contestación, lo he usado pero me saca este chorizo que creo no esta bien: (¿Y esas barras?)

"{\"0\":{\"id\":\"234\",\"asset_id\":\"1411\",\"ca t_id\":\"44\"},\"1\":{\"id\":\"287\",\"asset_id\": \"1482\",\"cat_id\":\"14\"}}"

Es verdad que lo mete entre {}, pero no es lo que esperaba

Sobre la segunda contestación...
Pues si, tienes razón... parece horripilante...
El primer método que dices, me gustaría algo asi, pero si el "Foo", pero creo que eso es inevitable. ¿cierto?

SObre el segundo caso, yo también pienso que es horripilante, y para nada me es necesario tener un índice, por lo que....según lo que me comentas esta bien como lo tengo.


La historia viene por que la parte App móvil no la voy a hacer yo, y me han pedido que metiendo el json array dentro de un object seria mucho mas eficiente para hacerlo ellos....
Pero estoy un poco confundido, no me han dado mas detalles.

Por lo pronto voy a ver si la primera forma que me has puesto les vale, y si no, haber si me entero mejor de la historia.
  #5 (permalink)  
Antiguo 18/09/2013, 09:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Pasar un JSON Array a JSON Object

El "foo" es inevitable en el sentido de "significa cualquier cosa", pues dicho valor es el índice que almacena tus objetos:

Código Javascript:
Ver original
  1. // forma 1
  2. var data = { "items": [
  3.     {
  4.         "id": "xxx",
  5.         "asset_id": "xxx",
  6.         "cat_id": "xx",
  7.     },
  8.     {
  9.         "id": "xxx",
  10.         "asset_id": "xxx",
  11.         "cat_id": "xx",
  12.  
  13.     }
  14. ] };
  15.  
  16. console.log(data.items);
  17.  
  18. // forma 2
  19. var items = [
  20.     {
  21.         "id": "xxx",
  22.         "asset_id": "xxx",
  23.         "cat_id": "xx",
  24.     },
  25.     {
  26.         "id": "xxx",
  27.         "asset_id": "xxx",
  28.         "cat_id": "xx",
  29.  
  30.     }
  31. ];
  32.  
  33. console.log(items);

Si el desarrollo de dicha App lo hace alguien más tienes el derecho de exigir las especificaciones de manera objetiva, nada de "me dijeron que use X y no más" y no hay una justificación técnica al respecto. A decir verdad me parece poco profesional la sugerencia que te han dado sin ejemplo alguno.

Si ellos requieren de algo eficiente entonces que especifiquen a precisión la estructura de datos que prefieren, de otra forma adivinar no puedes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 18/09/2013, 09:23
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Pasar un JSON Array a JSON Object

Acabo de hacer un ejemplo
Código PHP:
Ver original
  1. <?php
  2. $foo = array('foo' => array( 'bar', 'baz', 'bat' ));
  3. echo json_encode($foo, JSON_FORCE_OBJECT);
y me retorna
Código PHP:
Ver original
  1. {"foo":{"0":"bar","1":"baz","2":"bat"}}
Sin backslash. En tu php.ini ¿tienes habilitado magic_quotes? Si es así, te recomiendo la lectura que te acabo de brindar para que veas que no se debe usar.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: json, object
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:41.