簡體   English   中英

從API解析更改的JSON-使用哪種設計模式-PHP

[英]Parsing changing JSON from API - what design pattern to use - PHP

我從API獲取文章。 JSON對象各不相同,有些文章具有其他一些文章沒有的屬性。

我需要遍歷所有項目並操縱屬性(如果已設置)。

解決此問題的最佳方法是什么?

實際上,到目前為止,我所做的事情非常丑陋。

foreach ($items as $key => $item) {
  if(isset($item->title)){
     $parsed[$key]['title'] = $this->formatTitle($item->title);
  }
  if(isset($item->salutation)){$parsed[$key]['salutation'] = $item->salutation;}
  if(isset($item->eventDate) && isset($item->enventEndDate)){
     $parsed[$key]['eventDates'] = $this->ersDate($item->eventDate, $item->eventEndDate);
     $parsed[$key]['startDateTimestamp'] = $this->toTimestamp($item->eventDate);
     } elseif(isset($item->eventDate) && !isset($item->enventEndDate)){
     $parsed[$key]['eventDates'] = $this->ersDate($item->eventDate);
     $parsed[$key]['startDateTimestamp'] = $this->toTimestamp($item->eventDate);
      }

//... code continues ...

由於您的數據源具有不可預測的形狀,因此我認為無法解析數據。

您可以在單獨的函數中抽象丑陋,以便您的主腳本可以做到:

$parsed = parseAPI($items);

如果使用$items = json_decode($apiResponse,true) ,則會得到數組而不是對象。 然后,您可以在數組上使用+運算符以及默認數組,以將所有API響應轉換為相同形狀。

$defaultItem = [
    'salutation' => null,
    'eventDate' => null,
    'eventEndDate' => null,
    ...
];

現在,當您從API獲取商品時,您可以執行以下操作:

$items = json_decode($apiResponse,true);
foreach($items as &$item) $item += $defaultItem;

現在,每個$items成員都具有您期望的所有鍵。 如果缺少任何鍵,則插入$defaultItem的匹配鍵和值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM