2012-03-02 18 views
15

雑誌のAPIを使用して以下のjsonコンテンツを取得しようとしています。 jsonの出力は次のようになります。私は以下のJSONをphp配列に変換したい。file_get_contentsを使用したJSONからPHPへの配列

{ 
"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" 
      } 
     ] 
    }, 

] 
} 

私のコードは次のようになります。

<?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>"; 
?> 

上記のコードは空の配列を返します。 :(それはPHPのオブジェクト配列に上記のJSONに変換することが可能である方法 。 私は無力だ。

おかげ ハーン

+2

をいくつかのタイプミスをチェックしてください。 [JSONLint](http://jsonlint.com/)で検証してみてください。 –

+1

print_r($ data)の出力は何ですか? –

+0

@Jack&Aldo - 問題が修正されました。 Shivam S.Karaコード、最終的に働いた。 – hjaffer2001

答えて

18

あなたが提供するJSONのサンプルが有効ではありません。このJSONバリデータをオンラインでチェックhttp://jsonlint.com/ 。あなたは、あなたが配列に変換するために、このコードを使用することができ、有効なJSONを持っている行に59

一つを余分なコンマを削除する必要が

json_decode(真の$ JSON、);。

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 - ファイン、私のために働く:D – hjaffer2001

7

JSONは有効な文字列ではありません.Galbraithが上記のとおりです。

ここにその解決策があります。

<?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>"; 
?> 

このコードを使用すると、効果的です。

+0

私はAPIからデータを取得しているので、それを検証することはできません。しかし、私の与えられたコードはあなたのために働くでしょう –

+0

それは私のために完全に働いた。ありがとうたくさんの男:D – hjaffer2001

+0

あなたは正解として私の答えを選んで他の人がそれを使うことができるようにしてください。 –

2

はJSONオブジェクトが不正な形式であるため、あなたはおそらく、空の配列を取得している「」

<?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

ありがとうございました。それをチェックした。 :D – hjaffer2001

関連する問題