2010-04-26 92 views
0

我從其他組織的API獲取JSON編碼的輸出。如何處理可能是數組的JSON輸出,或者可能是值

在許多情況下,輸出可以是對象數組(如果有很多)或對象(如果只有一個)。現在我正在寫折磨代碼:

if (is_array($json['candidateList']['candidate'][0])) { 
    foreach ($json['candidateList']['candidate'] as $candidate) { 
    // do something to each object 
    } 
} 
else { 
    // do something to the single object 
} 

我如何處理它,我的代碼的「有所作爲」的部分只出現一次,並使用標準的語法?

回答

2

只是要它是一個數組,如果它不是 - 然後繼續迭代。

// Normalize response into an array 
if (!is_array($json['candidateList']['candidate'])) 
{ 
    $json['candidateList']['candidate'] = array($json['candidateList']['candidate']); 
} 

// Process data 
foreach ($json['candidateList']['candidate'] as $candidate) { 
    // do something to each object 
} 
2

你應該告訴誰提供的feed應該更加一致:)在這種情況下,總是適合擁有一個數組,即使只有一個候選人,所以你只需要一個元素陣列。

0

如果你可以讓api改變,請和Jaanus的答案一起。否則,可能編寫一個函數,它接受一個值並返回該值(如果該值是一個數組)或包含該值的一個元素數組(如果不是)。

2
<?php 

// When json is an object, convert to an array with a single member 
if (is_object($json)) $json = array($json); 

foreach ($json as $object) { 
    // do something to each object 
} 
1

把「做某事」的代碼放到一個函數中,然後從這兩個地方調用函數。這具有模塊化代碼的副作用。或者,您可以檢測到只有一個元素並在其周圍構建一個數組,然後在這兩個地方使用您的數組處理代碼。

(附註:我同意Jaanus A-形成良好的API會在兩種情況下返回一個列表,即使列表中只有一個成員長正是這個原因。)

相關問題