Julian Puerta Julian Puerta - 4 months ago 8
JSON Question

Loop through nested JSON in PHP

I have been searching but can’t find a way to solve this. I have the following JSON:

{
"success": true,
"outputScenario": "Informacion Inmuebles",
"data": {
"inmueble": [
{
"titulo": [
"Venta casa Villa liliana sur de Armenia"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 160 m2 , 4 alcobas y 2 baños "
],
"precio": [
"$140.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b49742320160714114235.jpg"
],
"referencia": [
199414
]
},
{
"titulo": [
"Casa 5 alcobas area 110m2 sector Colegio CASD"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 110 m2 , 5 alcobas y 3 baños "
],
"precio": [
"$140.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b42241220160714111955.jpeg"
],
"referencia": [
199395
]
},
{
"titulo": [
"CASA EN ARCADEZ"
],
"descripcion": [
"Casa para vender en Armenia, Quindío , 3 alcobas y 1 baños "
],
"precio": [
"$85.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b2160620160714095012.jpg"
],
"referencia": [
199341
]
},
{
"titulo": [
"CASA EN BOSQUES DE PINARES"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 60 m2 , 2 alcobas y 1 baños "
],
"precio": [
"$70.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b2160120160714094050.jpg"
],
"referencia": [
199328
]
},
{
"titulo": [
"CASA EN LA BRASILIA NUEVA"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 58,35 m2 , 3 alcobas y 1 baños "
],
"precio": [
"$75.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b2160820160714091008.jpg"
],
"referencia": [
199313
]
},
{
"titulo": [
"CASA CONJUNTO CERRADO AL NORTE"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 150 m2 , 4 alcobas y 2 baños "
],
"precio": [
"$350.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b2160920160714083544.jpg"
],
"referencia": [
199302
]
},
{
"titulo": [
"VENTA DE CASA EN MERCEDES DEL NORTE DE ARMENIA"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 72 m2 , 2 alcobas y 1 baños "
],
"precio": [
"$100.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b4651320160713070958.jpg"
],
"referencia": [
199254
]
},
{
"titulo": [
"CASA SECTOR LA GRESIA, TRIFAMILIAR 125M2, HERMOSA."
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 125 m2 , 5 alcobas y 4 baños "
],
"precio": [
"$150.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b4119120160713023016.jpg"
],
"referencia": [
199070
]
},
{
"titulo": [
"Venta casa Villa Liliana sur de Armenia"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 71 m2 , 3 alcobas y 3 baños "
],
"precio": [
"$120.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b4974620160713120208.jpg"
],
"referencia": [
198965
]
},
{
"titulo": [
"VENTA DE CASA AL SUR DE ARMENIA"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 79 m2 , 4 alcobas y 2 baños "
],
"precio": [
"$95.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b875720160713111033.jpg"
],
"referencia": [
198929
]
},
{
"titulo": [
"VENTA DE CASA EN EL NORTE DE ARMENIA"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 154 m2 , 4 alcobas y 3 baños "
],
"precio": [
"$310.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b46512920160712093023.jpg"
],
"referencia": [
198751
]
},
{
"titulo": [
"VENTA CASA ARMENIA"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 110 m2 , 3 alcobas y 2 baños "
],
"precio": [
"$185.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b831820160712054648.jpg"
],
"referencia": [
198686
]
},
{
"titulo": [
"VENTA DE CASA EN BOGOTA"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 191 m2 , 5 alcobas y 3 baños "
],
"precio": [
"$280.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b8751020160712032609.jpg"
],
"referencia": [
198628
]
},
{
"titulo": [
"CASA SEMI CAMPESTRE EN ARMENIA ZONA NORTE"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 125 m2 , 3 alcobas y 3 baños "
],
"precio": [
"$260.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b41192620160712040422.jpg"
],
"referencia": [
198594
]
},
{
"titulo": [
"Barrio El Recreo "
],
"descripcion": [
"Casa para vender en Armenia, Quindío , 4 alcobas y 3 baños "
],
"precio": [
"$190.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b2470420160712033152.jpg"
],
"referencia": [
198587
]
},
{
"titulo": [
"VENTA CASA EN EL NORTE DE ARMENIA"
],
"descripcion": [
"Casa para vender en Armenia, Quindío , 3 alcobas y 3 baños "
],
"precio": [
"$320.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/loscompradores/images/noimagelc.png"
],
"referencia": [
198578
]
},
{
"titulo": [
"Venta Casas Rio Claro en Armenia, Quindio"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 63,79 m2 "
],
"precio": [
"Consultar"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b80251620160712031258.png"
],
"referencia": [
198577
]
},
{
"titulo": [
"Casa en venta sector Norte Nueva Cecilia"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 189 m2 , 3 alcobas y 3 baños "
],
"precio": [
"$350.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b63892220160712025826.jpg"
],
"referencia": [
198574
]
},
{
"titulo": [
"Casa en condominio"
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 245 m2 , 3 alcobas y 3 baños "
],
"precio": [
"$520.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b658320160712024747.jpg"
],
"referencia": [
198569
]
},
{
"titulo": [
"Barrio Versalles Calarca "
],
"descripcion": [
"Casa para vender en Armenia, Quindío, con área de 224 m2 , 6 alcobas y 1 baños "
],
"precio": [
"$250.000.000"
],
"moneda": [
"Pesos Colombianos"
],
"imagen": [
"https://images.wasi.co/inmuebles/b2470620160712122415.jpg"
],
"referencia": [
198491
]
}
]
},
"stateToken": "eyJqYXIiOnsidmVyc2lvbiI6InRvdWdoLWNvb2tpZUAyLjIuMiIsInN0b3JlVHlwZSI6Ik1lbW9yeUNvb2tpZVN0b3JlIiwicmVqZWN0UHVibGljU3VmZml4ZXMiOnRydWUsImNvb2tpZXMiOlt7ImtleSI6IlBIUFNFU1NJRCIsInZhbHVlIjoiY2xkdm82aDFzc2pycjFyNnAyZmxwYzNpMjMiLCJleHBpcmVzIjoiMjAxNi0wNy0yMVQxODoyODo0NC4wMDBaIiwibWF4QWdlIjo2MDQ4MDAsImRvbWFpbiI6Ind3dy5sb3Njb21wcmFkb3Jlcy5jb20iLCJwYXRoIjoiLyIsImhvc3RPbmx5Ijp0cnVlLCJjcmVhdGlvbiI6IjIwMTYtMDctMTRUMTg6Mjg6NDQuMzQxWiIsImxhc3RBY2Nlc3NlZCI6IjIwMTYtMDctMTRUMTg6Mjg6NDQuMzQxWiJ9XX0sInZlcnNpb24iOjF9"
}


My php code for looping the data is the following:

<?php
$C = urlencode($_GET['ciudad']);
$T = $_GET['tipo'];
$N = $_GET['negocio'];

$search = "http://url.com/buscar/0.0.3?&q=&qc=&ciudad=".$C."&tipo_inmueble=".$T."&tipo_negocio=".$N."&alcobas=0&banios=0&precio=0";

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $search);
$result=curl_exec($ch);
$search_results = json_decode($result,true);
?>

<?php
foreach(array_slice($search_results['data']['inmueble'],0,5) as $result):
$titulo = $result["titulo"];
$descripcion = $result["descripcion"];
$precio = $result["precio"];
$moneda = $result["moneda"];
$imagen = $result["imagen"];
$referencia = $result["referencia"];
?>

<?php $var = $titulo; if (empty($var)) { echo ''; } if (isset($var)) { echo $titulo; }?>

<?php endforeach; ?>


But this doesnt work, I dont know if the problem is about the brackets on the JSON, as I use the same code for looping a diferent JSON source and it works.

The error it gives with the
array_slice
is the following:


Warning: array_slice() expects parameter 1 to be array, null given in
/buscar.php on line 20 Warning: Invalid argument supplied for
foreach() in /buscar.php on line 20 gives this error.


Removing the
array_slice
the error is:


Warning: Invalid argument supplied for foreach() in /buscar.php on
line 20


And
var_dump($search_results);
shows:


NULL

Answer

json_decode() is returning null, This is because it is invalid json

Check it against

http://jsonlint.com/

Your responses are arrays,

Change

$titulo = $result["titulo"];

to

$titulo = $result["titulo"][0];

Other then that it works on my system

 <?php
$result=file_get_contents('json.txt');
$search_results = json_decode($result,true);
?>

<?php
foreach(array_slice($search_results['data']['inmueble'],0,5) as $result):
    $titulo = $result["titulo"][0];
    $descripcion = $result["descripcion"][0];
    $precio = $result["precio"][0];
    $moneda = $result["moneda"][0];
    $imagen = $result["imagen"][0];
    $referencia = $result["referencia"][0];
?>
<?php $var = $titulo; if (empty($var)) { echo ''; } if (isset($var)) { echo $titulo; }?>

    <?php endforeach; ?>

Gives me

php -f testing.php 

Venta casa Villa liliana sur de Armenia
Casa 5 alcobas area 110m2 sector Colegio CASD
CASA EN ARCADEZ
CASA EN BOSQUES DE PINARES
CASA EN LA BRASILIA NUEVA