Php 用JSON数据创建一个对象/模型,它不是所需模型对象的精确副本
如何以面向对象的方式“水合物”、“映射”、“创建”(或其他名称)此JSON数据的对象或模型表示。我在下面包含的JSON字符串是从Google的AdWords API接收到的原始数据,不是我想要和需要的结构的精确副本,因此我可能不会将其转换为对象或类似对象 我一直在研究各种映射库和水合作用库,但我似乎不知道如何让它正常工作Php 用JSON数据创建一个对象/模型,它不是所需模型对象的精确副本,php,serialization,deserialization,google-ads-api,Php,Serialization,Deserialization,Google Ads Api,如何以面向对象的方式“水合物”、“映射”、“创建”(或其他名称)此JSON数据的对象或模型表示。我在下面包含的JSON字符串是从Google的AdWords API接收到的原始数据,不是我想要和需要的结构的精确副本,因此我可能不会将其转换为对象或类似对象 我一直在研究各种映射库和水合作用库,但我似乎不知道如何让它正常工作 { "report-name": { "@name": "Criteria performance report #5b3e67189ac85", }, "
{
"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对象,但可能需要为不同类型的报告数据返回其他类型的对象
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;
}
}
你好像有一些代码,有什么问题吗?只需从json数据设置对象属性?问题是我需要并且想要自动完成这项工作。许多年前,我使用Java时使用了一个库,在注释的帮助下,“在后台”实现了这一点。@MagnusEriksson除了我上面的回答之外,我还想说,例如,“row”节点应该反序列化为“AdGroup”实例数组。但不同的报告可能需要反序列化为“关键字”实例或“活动”实例。只需创建一个类,将此json作为构造函数中的参数,并对其进行解析和迭代,然后为其创建新实例,将其本身存储为数组。对于其他报告,只需扩展该类并更改需要更改的内容。这应该是相当琐碎的。