如何处理可能是数组的JSON输出,或者可能是值

时间:2010-04-26 15:42:28

标签: php algorithm json

我从另一个组织的API获得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
}

我如何处理它,以便我的代码中的“做某事”部分只出现一次并使用标准语法?

5 个答案:

答案 0 :(得分:2)

你应该告诉谁提供feed它应该更加一致:)在这种情况下,总是有一个数组是合适的,即使只有一个候选者,所以你只有一个元素数组

答案 1 :(得分: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
} 

答案 2 :(得分: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
}

答案 3 :(得分:1)

在函数中放入“do something”代码,然后从两个地方调用该函数。这具有模块化代码的附带好处。

或者,你可以检测到你只有一个元素并围绕它构建一个数组,然后在两个地方使用你的数组处理代码。

(旁注:我同意Jaanus。一个结构良好的API会在两种情况下都返回一个列表,即使该列表只有一个成员长。对于完全这个原因。)

答案 4 :(得分:0)

如果你能改变api,那就去Jaanus的回答吧。否则,可能编写一个接受值的函数并返回值(如果值是数组)或包含该值的单元素数组(如果不是)。