用一种面向对象的方式如何“水合”,“映射”,“创建”(或称其为任何一种)此JSON数据的对象或模型表示。我下面包含的JSON字符串是从Google的AdWords API接收的原始数据,并不是我想要和需要的结构的精确副本,因此,我不仅仅可以将其转换为对象或类似对象。
我一直在研究各种映射库和水合库,但似乎无法为如何使其正常工作而烦恼。
{
"report-name": {
"@name": "Criteria performance report #5b3e67189ac85",
},
"date-range": {
"@date": "Jun 5, 2018-Jul 4, 2018",
},
"table": {
"columns": {
"column": [
{
"@name": "adGroup",
"@display": "Ad group",
},
{
"@name": "impressions",
"@display": "Impressions",
},
{
"@name": "clicks",
"@display": "Clicks",
},
{
"@name": "cost",
"@display": "Cost",
}
]
},
"row": [
{
"@adGroup": "Ad Group 1 of Another Campaign",
"@impressions": 0,
"@clicks": 0,
"@cost": 0,
},
{
"@adGroup": "Ad group 1 of Initial Campaign",
"@impressions": 0,
"@clicks": 0,
"@cost": 0,
}
]
}
}
我可以想象对象或模型看起来像这样。 报告的类型不同,但是结构看起来完全一样,只是项目不包含相同的属性。发布的JSON结构表示“ AdGroup”,这意味着“行”需要反序列化为不同的模型。基本上调用“ getRowItems”将需要为发布的JSON返回AdGroup-object的对象,但对于不同类型的报告数据,可能需要返回其他类型的对象。
class ReportModelExample {
private $reportName;
private $reportDate;
private $reportItems;
public function getReportName()
{
return $this->reportName;
}
public function setReportName($reportName): void
{
$this->reportName = $reportName;
}
public function getReportDate()
{
return $this->reportDate;
}
public function setReportDate($reportDate): void
{
$this->reportDate = $reportDate;
}
public function getReportItems()
{
return $this->reportItems;
}
public function setReportItems($reportItems): void
{
$this->reportItems = $reportItems;
}
}