[英]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.