2010-04-26 86 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会在两种情况下返回一个列表,即使列表中只有一个成员长正是这个原因。)

相关问题