2011-07-26 24 views
10

Aquí está mi código php con la cadena con formato JSON:php json_decode cómo salida del conjunto

<?php 

$string='{"items": [ 
    { 
    "address":"W 7th Ave" 
    }, 
    { 
    "address":"W 8th St" 
    } 
    ]}'; 

$json = json_decode($string, true); 

    foreach ($json as $key => $value){ 
     echo "$key: $value\n"; 
    }; 

?> 

Quiero aprender cómo analizar/cadena JSON de salida en algo que puedo mostrar en html o puestos en la base de datos .. Sin embargo, estoy atrapado en algo que es muy simple pero he pasado la mayor parte de la mañana tratando de descubrirlo.

Lo que quiero entender es por qué los resultados de mi código anterior me da el siguiente resultado:

"items: Array"

Y no lo que yo quiero/esperar obtener:

"items: W 7th Ave" 
"items: W 8th St" 

Lo ¿Me estoy perdiendo? ¿No es "Dirección" el siguiente "nivel" hacia abajo desde "Artículo" en la matriz?

+0

En la parte 'foreach',' $ json' devuelve 'array'. – Tarik

Respuesta

14
$string = file_get_contents('./string.json'); 
$json = json_decode($string); 

si usted quiere tener items: <address>:

foreach ($json['items'] as $address) 
{ 
    echo "items:". $address['address'] ."\n"; 
}; 

de todos modos si no está seguro acerca de cómo una matriz se construyó usted podría imprimir a través de:

print_r($json); 

el que se imprimirá:

Array 
(
    [items] => Array 
     (
      [0] => Array 
       (
        [address] => W 7th Ave 
       ) 

      [1] => Array 
       (
        [address] => W 8th St 
       ) 
     ) 
) 

Ahora descubriste que $json contiene solo una matriz (items) de dos matrices, luego, si la bucleas, obtendrás esa matriz que está impresa en tu ejemplo. Como se explica más arriba, debe ir un paso más allá al colocar los elementos en su matriz items e imprimir su elemento address.

aquí es el guión completo: http://pastie.org/2275879

1

Sus artículos son en una matriz. Usted podría bucle a través de ellos de esta manera:

foreach ($json['items'] as $address) 
{ 
    echo 'Address: '.$address; 
} 
1

Por cierto, hice hacer var_dump, impresión, print_r, cambiar hacia los dos lados del objeto a la matriz, para tratar de aprender más sobre la estructura matriz, etc y también hice un montón de variaciones de echo, y para y foreach loops, etc. para tratar de obtener lo que quería de la matriz.

Ok por lo que, para resumir, las respuestas parecen indicar que tengo que:

  • primero obtener la entera gama ejemplo, string $ (hizo eso)
  • luego decodificar matriz en $ JSON (hizo eso)
  • y luego analizar de alguna manera las matrices secundarias desde $ json (haciendo algo así como hacer referencia a las direcciones en la matriz como "elementos.adquisición" o "[artículos] [dirección]" etc. (todavía no estoy seguro de las respuestas anteriores cómo haz esto ... lo insinúan pero no pueden ver la sintaxis, etc.)

He intentado tanto respuestas y tiene:

Usando TaylorOtwell respuesta:

llegué: Dirección: Array Dirección: Array

Taylor

Usando la respuesta de Dalen:

Tengo: 0: Matriz 1: Matriz

Parece que de alguna manera tengo que recorrer una matriz por segunda vez dentro del primer foreach para obtener los valores reales?

¿Se vería algo como esto?

foreach ($json['items'] as $key => $value) 
{ 
foreach ($json['items']['address'] as $key => $value) 
{ 
    echo "$key: $value\n"; 
}; 
}; 
+0

bien, creo que entiendo el punto, he actualizado mis dos declaraciones foreach, trato de probarlas, le permitirán usar solo un foreach en lugar de dos – Dalen

+0

Ah, éxito. La sintaxis que me faltaba era $ address ['address'] ... ¡gracias! mi cadena json es en realidad 190 direcciones en la matriz de elementos. Lo tengo en un archivo separado al que me gustaría referirme directamente en $ string pero no lo recogen $ string = './Items.json'; que funciona para algunas cadenas json que he probado. Puedo copiar y pegar toda la cadena en el archivo php como $ cadena que funciona bien. ¿Qué sintaxis usaría para referirme al archivo json remoto? – curtisp

+0

he vuelto a editar mi respuesta, verifique las dos primeras líneas del código – Dalen

-1

Es posible que desee para simplificar su cadena de entrada de la siguiente manera

$string='{"address":["W 7th Ave","W 8th St"]}';

$json = json_decode($string, true);
echo'<pre>';
print_r($json);
echo'</pre>';
foreach ($json['address'] as $key=>$value){
echo "Address $key:". $value ."<br>";
};

+0

esto no resuelve el problema de la operación al analizar el json que mostró. – pascalhein

0

Primero crea una clase para tus elementos.

function getAddress(address) 
{ 
this.address=address; 
} 

introduzca objetos a la matriz

newAddress = JSON.stringify(new 
getAddress(address)); 
AddressArray.push(newAddress); 

Convertir su matriz como JSON matriz mediante

AllAddress=JSON.stringify(AddressArray); 

Envíe su matriz al backend/ir a buscar elementos como

$json_array = json_decode($AllAddress, true); 
for($i=0;$i<count($json_array);$i++) 
{ 
$eachAddress = json_decode($json_array[$i],true); 
$address= $eachAddress["address"];//fetch particular element from your JSON Object 
} 

* Use implode (php) para obtener todos los elementos de la matriz a la vez.

Cuestiones relacionadas