json对象行为错误

时间:2014-12-25 01:12:21

标签: php json

我正在测试运行Web应用程序 需要json的地方。我有以下json 结构:

{
    "Articles": [
        {
            "Article": {
                "ID": 111,
                "title": "Idiot",
                "author": "Moron",
                "pubDate": "11/2/14", 
                "summary": "bla bla bla"
            },

            "Article": {
                "ID": 222,
                "title": "wisdom",
                "author": "wise one",
                "pubDate": "11/2/15", 
                "summary": "ha ha ha"
            }
        } 
    ]
}

然后我决定在添加之前检查匹配的ID是否退出 任何记录。为此,我写了一个方法,将其封装在其中 一个JSon类如下:

public function ID_Exists($ID){

        $file = file_get_contents($this->FileName, true);
        $data = json_decode($file, false);       //get json in array string format 

        foreach($data as $child){
            foreach($child as $item){
                if($item->ID ==  $ID){
                    echo 'Exists';
                }else{
                    echo 'Non Existent';
                }
            }
        } 
    }

我测试它就像:

$Obj = new JSon('file.json');        //knows what to do
 if($Obj->ID_Exists(111)){
     //ok ! no problem
 }else{
     ////no problem
 }

这是我得到的输出:

Undefined property: stdClass::$ID in 
C:\Server\wamp\www\Oweb\libs\dmanager.php on line 635

我做错了什么?我不想使用该数组 json_decode()的格式。

1 个答案:

答案 0 :(得分:4)

您的JSON结构是不可能的。 Articles是一个数组,其中包含一个包含键Article两次的单个对象 - 这不起作用。

您的结构需要:

{
    "Articles": [
        {
            "ID": 111,
            ...
        },
        {
            "ID": 222,
            ...
        }
    ]
}

您可以使用哪个遍历:

$data = json_decode($json);
foreach ($data->Articles as $article) {
    if ($article->ID == ..) ..
}