根据JSON数据创建对象/模型,该对象/模型并非所需模型对象的精确副本

时间:2018-07-06 05:22:16

标签: php serialization deserialization google-adwords

用一种面向对象的方式如何“水合”,“映射”,“创建”(或称其为任何一种)此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;
    }
}

0 个答案:

没有答案