【问题标题】:How to deal with JSON output that might be an array, or might be a value如何处理可能是数组或值的 JSON 输出
【发布时间】:2010-04-26 15:42:27
【问题描述】:

我正在从另一个组织的 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
}

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

【问题讨论】:

    标签: php algorithm json


    【解决方案1】:

    如果不是,只需将其设为数组 - 然后继续迭代。

    // 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】:

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

      【讨论】:

        【解决方案3】:
        <?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
        } 
        

        【讨论】:

          【解决方案4】:

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

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

          (旁注:我同意 Jaanus 的观点。格式良好的 API 在这两种情况下都会返回一个列表,即使该列表只有一个成员。正是这个原因。)

          【讨论】:

            【解决方案5】:

            如果您可以更改 api,请使用 Jaanus 的回答。否则,可能会编写一个函数,该函数接受一个值并返回该值(如果该值是一个数组)或一个包含该值的单元素数组(如果不是)。

            【讨论】:

              猜你喜欢
              • 2014-04-25
              • 2019-05-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多