Создайте объект / модель из данных JSON, которая не является точной копией требуемого объекта-модели - PullRequest
0 голосов
/ 06 июля 2018

Как бы в OOP-способе "гидрировать", "отобразить", "создать" (или как там это называется) представление объекта или модели этих данных 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 представляет «Группу объявлений», что означает, что «строки» необходимо десериализовать в разные модели. По сути, вызов «getRowItems» должен был бы вернуть объекты AdGroup для опубликованного JSON, но, возможно, потребуется вернуть другие типы объектов для различных типов данных отчета.

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;
    }
}
...