Php 用JSON数据创建一个对象/模型,它不是所需模型对象的精确副本

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", }, "

如何以面向对象的方式“水合物”、“映射”、“创建”(或其他名称)此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对象,但可能需要为不同类型的报告数据返回其他类型的对象

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作为构造函数中的参数,并对其进行解析和迭代,然后为其创建新实例,将其本身存储为数组。对于其他报告,只需扩展该类并更改需要更改的内容。这应该是相当琐碎的。