我正在递交一些数据,这些数据没有明确定义并且可能会发生变化(或者至少没有正式的规范和属性可能被添加/删除)。我无法控制作为JSON接收的数据,然后将json_decode
作为匿名对象。
为了理解数据,我想构建一些映射。假设数据定义了一个人,例如:
$Data = json_decode($TheRawData);
$Mappings->Personal['Firstname']="FirstName";
$Mappings->Personal['Employer']="Employment->CurrentEmployer";
如果我手动执行该操作,则表示可以在$Data->FirstName
找到名字,当前雇主在$Data->Employer->CurrentEmployer
我想在数据库中存储映射的信息以保持可维护性。不幸的是,当我尝试解析对象以获取定义的属性时,如下所示:
foreach($Mappings->Personal as $Key=>$Value) {
print $Key . ": " . $Data->{$Value};
}
firstname完美运行(如预期的那样),但它不喜欢第二个条目的选择器,可能是因为它跨越多个对象并需要重复查找。
有人可以告诉我是否有任何方法可以映射到我对象中的任意位置?
答案 0 :(得分:1)
一个快速的谷歌没有任何有用的东西,所以我不得不提出更多迭代的建议。
$Data = json_decode($TheRawData);
$Mappings->Personal['Firstname']=array("FirstName");
$Mappings->Personal['Employer']=array("Employment","CurrentEmployer");
foreach($Mappings->Personal as $Key=>$Value) {
$Result = $Data;
foreach($Value as $PropertyName) {
$Result = $Result->$PropertyName;
}
print $Key . ": " . $Result;
}
我没有对此进行过测试,但这些方面的内容对您有用。