2012-03-02 22 views
15

Estoy tratando de obtener el contenido de json a continuación utilizando una api de la revista. La salida de json es así. Quiero que el siguiente json se convierta a php array.JSON a PHP Matriz usando file_get_contents

{ 
"bpath": "http://www.sampledomain.com/", 
"clist": [ 
    { 
     "cid": "11", 
     "display_type": "grid", 
     "ctitle": "abc", 
     "acount": "71", 
     "alist": [ 
      { 
       "aid": "6865", 
       "adate": "2 Hours ago", 
       "atitle": "test", 
       "adesc": "test desc", 
       "aimg": "", 
       "aurl": "?nid=6865", 
       "weburl": "news.php?nid=6865", 
       "cmtcount": "0" 
      }, 

      { 
       "aid": "6857", 
       "adate": "20 Hours ago", 
       "atitle": "test1", 
     "adesc": "test desc1", 
     "aimg": "", 
       "aurl": "?nid=6857", 
       "weburl": "news.php?nid=6857", 
       "cmtcount": "0" 
      } 
     ] 
    }, 
    { 
     "cid": "1", 
     "display_type": "grid", 
     "ctitle": "test1", 
    "acount": "2354", 
     "alist": [ 
      { 
       "aid": "6851", 
       "adate": "1 Days ago", 
       "atitle": "test123", 
     "adesc": "test123 desc", 
     "aimg": "", 
       "aurl": "?nid=6851", 
       "weburl": "news.php?nid=6851", 
       "cmtcount": "7" 
      }, 
      { 
       "aid": "6847", 
       "adate": "2 Days ago", 
       "atitle": "test12345", 
     "adesc": "test12345 desc", 
     "aimg": "", 
       "aurl": "?nid=6847", 
       "weburl": "news.php?nid=6847", 
       "cmtcount": "7" 
      } 
     ] 
    }, 

] 
} 

Mi código es así.

<?php 
$json_url = "http://api.testmagazine.com/test.php?type=menu"; 
$json = file_get_contents($json_url); 
$data = json_decode($json, TRUE); 
echo "<pre>"; 
print_r($data); 
echo "</pre>"; 
?> 

El código anterior devuelve una matriz vacía. :( ¿Cómo es posible convertir el JSON anterior a la matriz php objeto. no puedo hacer nada.

Gracias Haan

+2

Usted probablemente está recibiendo una matriz vacía porque el objeto JSON es un formato incorrecto. Intente validarlo a través de [JSONLint] (http://jsonlint.com/). –

+1

¿Cuál es el resultado de print_r ($ data)? –

+0

@Jack & Aldo: me solucionaron el problema. Código de Shivam S.Kara, finalmente funcionó. – hjaffer2001

Respuesta

18

La muestra JSON que ha proporcionado no es válido. Compruébelo usted mismo en línea con este JSON Validador http://jsonlint.com/ . es necesario eliminar la coma extra en la línea 59.

Uno tiene JSON válida puede utilizar este código para convertirlo en una matriz

json_decode ($ JSON, true);.

Array 
(
    [bpath] => http://www.sampledomain.com/ 
    [clist] => Array 
     (
      [0] => Array 
       (
        [cid] => 11 
        [display_type] => grid 
        [ctitle] => abc 
        [acount] => 71 
        [alist] => Array 
         (
          [0] => Array 
           (
            [aid] => 6865 
            [adate] => 2 Hours ago 
            [atitle] => test 
            [adesc] => test desc 
            [aimg] => 
            [aurl] => ?nid=6865 
            [weburl] => news.php?nid=6865 
            [cmtcount] => 0 
           ) 

          [1] => Array 
           (
            [aid] => 6857 
            [adate] => 20 Hours ago 
            [atitle] => test1 
            [adesc] => test desc1 
            [aimg] => 
            [aurl] => ?nid=6857 
            [weburl] => news.php?nid=6857 
            [cmtcount] => 0 
           ) 

         ) 

       ) 

      [1] => Array 
       (
        [cid] => 1 
        [display_type] => grid 
        [ctitle] => test1 
        [acount] => 2354 
        [alist] => Array 
         (
          [0] => Array 
           (
            [aid] => 6851 
            [adate] => 1 Days ago 
            [atitle] => test123 
            [adesc] => test123 desc 
            [aimg] => 
            [aurl] => ?nid=6851 
            [weburl] => news.php?nid=6851 
            [cmtcount] => 7 
           ) 

          [1] => Array 
           (
            [aid] => 6847 
            [adate] => 2 Days ago 
            [atitle] => test12345 
            [adesc] => test12345 desc 
            [aimg] => 
            [aurl] => ?nid=6847 
            [weburl] => news.php?nid=6847 
            [cmtcount] => 7 
           ) 

         ) 

       ) 

     ) 

) 
+0

@Galbraith - Bien, funciona para mí: D – hjaffer2001

7

You JSON no es una cadena válida como P. Galbraith le dijo anteriormente.

y aquí está la solución para ello.

<?php 
$json_url = "http://api.testmagazine.com/test.php?type=menu"; 
$json = file_get_contents($json_url); 
$json=str_replace('}, 

]',"} 

]",$json); 
$data = json_decode($json); 

echo "<pre>"; 
print_r($data); 
echo "</pre>"; 
?> 

Utilice este código para usted.

+0

Sé que está obteniendo datos de la API por lo que no es posible que la valide. Pero mi código dado funcionará para usted –

+0

me funcionó a la perfección. Muchas gracias hombre: D – hjaffer2001

+0

¿Puedes elegir mi respuesta como una respuesta correcta para que otras personas puedan usarla? –

2

Comprobar alguna errata ''

<?php 
//file_get_content(url); 
$jsonD = '{ 
    "bpath":"http://www.sampledomain.com/", 
    "clist":[{ 
      "cid":"11", 
      "display_type":"grid", 
      "ctitle":"abc", 
      "acount":"71", 
      "alist":[{ 
        "aid":"6865", 
        "adate":"2 Hours ago", 
        "atitle":"test", 
        "adesc":"test desc", 
        "aimg":"", 
        "aurl":"?nid=6865", 
        "weburl":"news.php?nid=6865", 
        "cmtcount":"0" 
       }, 
       { 
        "aid":"6857", 
        "adate":"20 Hours ago", 
        "atitle":"test1", 
        "adesc":"test desc1", 
        "aimg":"", 
        "aurl":"?nid=6857", 
        "weburl":"news.php?nid=6857", 
        "cmtcount":"0" 
       } 
      ] 
     }, 
     { 
      "cid":"1", 
      "display_type":"grid", 
      "ctitle":"test1", 
      "acount":"2354", 
      "alist":[{ 
        "aid":"6851", 
        "adate":"1 Days ago", 
        "atitle":"test123", 
        "adesc":"test123 desc", 
        "aimg":"", 
        "aurl":"?nid=6851", 
        "weburl":"news.php?nid=6851", 
        "cmtcount":"7" 
       }, 
       { 
        "aid":"6847", 
        "adate":"2 Days ago", 
        "atitle":"test12345", 
        "adesc":"test12345 desc", 
        "aimg":"", 
        "aurl":"?nid=6847", 
        "weburl":"news.php?nid=6847", 
        "cmtcount":"7" 
       } 
      ] 
     } 
    ] 
} 
'; 

$parseJ = json_decode($jsonD,true); 

print_r($parseJ); 
?> 
+0

muchas gracias. comprobado. :RE – hjaffer2001