使用php-jsonpath在json中获取节点

时间:2015-01-20 11:20:25

标签: php json

我是一个json结构:

{
    "Photos":{
        "Photo":[
            {
                "ID" : 111,
                 "type" : "JPEG",
                "URL": "blabla"  
            },
            {
                "ID": 222,
                "type": "JPG",
                "URL": "blaaaaaaaaa"
            }
        ]
    }
}

我试图使用php-jsonpath(由stefan Goessner:http://goessner.net/articles/JsonPath)获取ID == 222的节点(照片)。然后,如果找到,则将新数据(数组)插入该节点。这样最终输出变为:

{
    "Photos":{
        "Photo":[
            {
                "ID" : 111,
                 "type" : "JPEG",
                "URL": "blabla"  
            },
            {
                "ID": 222,
                "type": "JPG",
                "URL": "blaaaaaaaaa",
                "New_data" : {"CROP": "5x7", "Pixel": "none"}
            }
        ]
    }
}

目前我有这个查询字符串:

$parser = new Services_JSON(SERVICE_JSON_LOOSE_TYPE);
$jsonobj = $parser->decode(file_get_contents("filename.json", true));

$result = jsonPath($jsonobj , "$..Photo[?(@.ID == 222)]");   //is this expression wrong ?

我只期望具有所述ID(222)的节点作为返回的$ result,所以 我能做到这一点:

if($result != false){
     $result[] = array("New_data" => array("CROP" => 5x7, "Pixel" => "none"));
}

不幸的是我去了错误信息:

Notice: Array to string conversion in C:\Server\wamp\www\MyCMS\jsonpath.php(119) 

我犯了什么罪?我该如何解决这个问题?任何代码片段(如有必要)将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用循环来迭代值 -

       $list = array();
        foreach ($_POST['Photos']['Photo'] as $key => $value) {
                    $list[] = $value;
            }