Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ¿Cómo iterar sobre un jSON?

Estas en el tema de ¿Cómo iterar sobre un jSON? en el foro de PHP en Foros del Web. Hola a todos! Voy al grano, tengo un array llamado $resultado . Sus keys son numéricos, y los valores son jSON's. Así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 14/07/2016, 23:01
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 1 mes
Puntos: 22
Pregunta ¿Cómo iterar sobre un jSON?

Hola a todos!

Voy al grano, tengo un array llamado $resultado. Sus keys son numéricos, y los valores son jSON's. Así:
Código json:
Ver original
  1. {
  2.     "metadata.title": "",
  3.     "metadata.description": "",
  4.     "metadata.keywords": "",
  5.     "metadata.robots": "",
  6.     "metadata.author": "",
  7.     "config.enable_comments": "0",
  8.     "config.primary_category": "27"
  9. }

Necesito recuperar el valor de config.primary_category. Es decir, necesito recuperar el 27. ¿Cómo lo recupero? Intento recuperarlo así:
Código PHP:
foreach ($resultado as $key => $value) {
    if ( 
is_object($value) ) {
        echo 
$value->config.primary_category;
    }

Evidentemente no funciona, y en pantalla sólo se devuelve esto: "primary_category".

¿Me ayudan a recuperar el 27?

Saludos!
  #2 (permalink)  
Antiguo 15/07/2016, 06:01
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 5 meses
Puntos: 48
Información Respuesta: ¿Cómo iterar sobre un jSON?

Hola berkeleyPunk,

según entiendo tienes un array PHP que contiene en sus valores cadenas JSON, correcto?

Si es asi mira el ejemplo que he preparado para que comprendas mejor como acceder a la informacion contenida en una cadena JSON desde PHP.

Código PHP:
$matriz = array();
$matriz[] = '{"nombre":"Juan","edad":21}';
$matriz[] = '{"nombre":"Ana","edad":25}';
$matriz[] = '{"nombre":"Pedro","edad":18}';

// Recorremos $matriz y guardamos en $json el valor de cada iteracion.
foreach ($matriz as $json)
{
    
// Convertimos el JSON a un array asociativo.
    
$persona json_decode($jsontrue); // El segundo parametro convertira el json en un array asociativo.

    
echo "<br>NOMBRE: ".$persona['nombre'];
    echo 
"<br>EDAD: ".$persona['edad'];
    echo 
"<hr>";

Referencias:

http://php.net/manual/es/function.json-decode.php

Saludos.
__________________
El problema de nuestra época consiste en que sus hombres no quieren ser útiles sino importantes.

Winston Churchill
  #3 (permalink)  
Antiguo 15/07/2016, 07:25
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: ¿Cómo iterar sobre un jSON?

En realidad es muy simple utiliza json_decode con el segundo argumento a true.
Código PHP:
Ver original
  1. $json = '{
  2.  
  3.    "metadata.title": "",
  4.  
  5.    "metadata.description": "",
  6.  
  7.    "metadata.keywords": "",
  8.  
  9.    "metadata.robots": "",
  10.  
  11.    "metadata.author": "",
  12.  
  13.    "config.enable_comments": "0",
  14.  
  15.    "config.primary_category": "27"
  16.  
  17. }';
  18.  
  19. $decode = json_decode($json, true);
  20.  
  21. $category = $decode['config.primary_category'];
  22.  
  23. print_r($category); //print 27
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #4 (permalink)  
Antiguo 15/07/2016, 08:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: ¿Cómo iterar sobre un jSON?

Cita:
Sus keys son numéricos, y los valores son jSON's.
De hecho los keys son strings, keypaths separados por puntos, no numéricos.

Los valores son numéricos, o cadenas vacías.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 22/09/2016, 21:17
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 1 mes
Puntos: 22
De acuerdo Respuesta: ¿Cómo iterar sobre un jSON?

Cita:
Iniciado por Synkronice Ver Mensaje
...mira el ejemplo que he preparado para que comprendas mejor como acceder a la informacion contenida en una cadena JSON desde PHP...
Esto suena muy bien y funciona, gracias. Pero no aplica a mi ejemplo, ya que en tu caso, el key de tu jSON es una sola palabra: nombre. En mi caso es un nombre compuesto y unido por un punto: config.primary_category. Y eso es lo que me daba problemas.

hhs, en efecto, eso que comentas seguro me hubiera servido en su momento, pero no sé por qué razón no lo emplee. Esto pasa por responder los posts ya muy tarde. Gracias de todos modos.

pateketrueke, no, sí son numéricos, el caso es que yo tuve la culpa de no poner completo el array. Va así:
Código PHP:
$miarray = array(
  
=> "{
    "
metadata.title": "",
    "
metadata.description": "",
    "
metadata.keywords": "",
    "
metadata.robots": "",
    "
metadata.author": "",
    "
config.enable_comments": "0",
    "
config.primary_category": "27"
    }"
,
  
=> "{
    "
metadata.title": "",
    "
metadata.description": "",
    "
metadata.keywords": "",
    "
metadata.robots": "",
    "
metadata.author": "",
    "
config.enable_comments": "0",
    "
config.primary_category": "27"
    }"
); 
  #6 (permalink)  
Antiguo 22/09/2016, 21:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: ¿Cómo iterar sobre un jSON?

Pues la sintaxis que muestras ni siquiera es válida.

Código PHP:
Ver original
  1. $miarray = array(
  2.   0 => "{
  3.    "metadata.title": "",
  4.    "metadata.description": "",
  5.    "metadata.keywords": "",
  6.    "metadata.robots": "",
  7.    "metadata.author": "",
  8.    "config.enable_comments": "0",
  9.    "config.primary_category": "27"
  10.    }",
  11.   1 => "{
  12.    "metadata.title": "",
  13.    "metadata.description": "",
  14.    "metadata.keywords": "",
  15.    "metadata.robots": "",
  16.    "metadata.author": "",
  17.    "config.enable_comments": "0",
  18.    "config.primary_category": "27"
  19.    }"
  20. );

Además, aunque lo niegues, las claves del código JSON original no son numéricas, observa:
Código PHP:
Ver original
  1. $json = <<<JSON
  2.  
  3. {
  4.     "metadata.title": "",
  5.     "metadata.description": "",
  6.     "metadata.keywords": "",
  7.     "metadata.robots": "",
  8.     "metadata.author": "",
  9.     "config.enable_comments": "0",
  10.     "config.primary_category": "27"
  11. }
  12.  
  13. JSON;
  14.  
  15. $data = json_decode($json, true);
  16.  
  17. echo $data['config.primary_category']; // 27

Cita:
no, sí son numéricos
¿Seguro?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: Ninguno
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:39.