我有一个相当大的多维stdClass对象从json feed用PHP输出。
它大约8或9步深,我需要的数据大约是7步。
我想知道我是否可以轻松地抓住其中一个而不是这样做:
echo $ data-> one-> two-> anotherone-> gettinglong-> omg-> hereweare;
我这样说是因为数据结构可能会随着时间而改变。
这可能吗?
答案 0 :(得分:0)
不是没有搜索什么可能效率低下。 Json是一个结构化数据对象,目的是消除这样的东西。
答案 1 :(得分:0)
您可以尝试将对象解析为数组并在数组中搜索所需的值,它只是循环遍历对象的每个级别。
function parseObjectArrayToArray($objectPassed, &$in_arr = array()) {
foreach($objectPassed as $element) {
if(is_object($element) || is_array($element)) {
parseObjectArrayToArray($element,$in_arr);
} else {
// XML is being passed, need to strip it
$element = strip_tags($element);
// Trim whitespace
$element = trim($element);
// Push to array
if($element != '' && !in_array($element,$in_arr)) {
$in_arr[] = $element;
}
}
}
return $in_arr;
}
如何致电
$parsed_obj_arr = parseObjectArrayToArray($objectPassed);
答案 2 :(得分:0)
如果数据结构可以更改,但不经常更改,最好的办法是编写一个包装器对象,这样您只需要在更改时的单个点更改路径:
class MyDataWrapp {
public $json;
function __construct($jsonstring){
$this->json = json_decode($jsonstring);
}
function getHereWeAre(){
return $this->json->one->two->anotherone->gettinglong->omg->hereweare;
}
}
如果数据结构发生显着变化,我会json_decode
作为数组数组,并且可能使用RecursiveFilterIterator
。