【问题标题】:JSON to PHP Array using file_get_contentsJSON 到 PHP 数组使用 file_get_contents
【发布时间】:2012-03-20 17:01:19
【问题描述】:

我正在尝试使用杂志 api 获取以下 json 内容。 json的输出是这样的。我希望下面的 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>";
?>

上面的代码返回一个空数组。 :( 如何将上述 JSON 转换为 php 对象数组。 我很无奈。

谢谢 韩

【问题讨论】:

  • 您可能会得到一个空数组,因为 JSON 对象格式不正确。尝试通过JSONLint 验证它。
  • print_r($data) 的输出是什么?
  • @Jack & Aldo - 解决了我的问题。 Shivam S.Kara 代码,终于成功了。

标签: php arrays file-get-contents json


【解决方案1】:

检查一些错字','

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

【讨论】:

    【解决方案2】:

    您的 JSON 不是 P. 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>";
    ?>
    

    使用此代码,它将为您工作。

    【讨论】:

    • 我知道您正在从 API 获取数据,因此您无法验证它。但是我给定的代码对你有用
    • 能否请您选择我的答案作为正确答案,以便其他人使用。
    【解决方案3】:

    您提供的 JSON 示例无效。使用此 JSON 验证器 http://jsonlint.com/ 在线检查。您需要删除第 59 行多余的逗号。

    如果您拥有有效的 json,您可以使用此代码将其转换为数组。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-25
      • 2020-03-27
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      相关资源
      最近更新 更多