PHP JSON解析问题

时间:2016-04-14 18:02:01

标签: php json parsing foreach

我从政府API获得此JSON输出,我需要使用PHP显示它。问题是我不能连续使用foreach一次或者它不起作用。我无法将所有标准加载到第一个foreach中,因为说第一个数据ACASS返回3个结果,其后的所有字段将显示3次。每个字段都可以返回1-10个结果,因此需要有一个系统来计算变量。

我认为解决方案是将我需要的所有JSON项目显示在第一个foreach中,但将它们设置为仅在它们被填充时才显示。那或者使用我现有的编码系统,但不知怎的,以某种方式解释变数。

非常感谢任何可能的解决方案。

这是JSON输出... https://api.data.gov/sam/v4/registrations/9606040070000?api_key=WI7nHENlp6QDMnWsb0Nnmzsv1slPDTjNM0XBoKvY

这是PHP我使用的...

echo "ACASS ID:".$decoded_results['sam_data']['registration']['qualifications']['acass']['id']."</br>"; 

foreach($decoded_results['sam_data']['registration']['qualifications']['acass']['answers'] as $acass)

  {

  echo 'Answer Text:'.$acass['answerText'].'</br>';
  echo 'ACASS Section:'.$acass['section'].'</br>';

  }

$formerfirm = $decoded_results['sam_data']['registration']['qualifications']['acass']['answers'][2]['FormerFirm'];

  echo 'Former Firm ID:'.$formerfirm['id'].'</br>';
  echo 'Former Firm Year Established:'.$formerfirm['yearEstablished'].'</br>';
  echo 'Former Firm Name:'.$formerfirm['name'].'</br>';
  echo 'Former Firm DUNS'.$formerfirm['duns'].'</br>';

我尽力保持这个简短明了的问题/代码。总之,问题是如果你看一下JSON,数据层次结构会在ACASS / Answers下显示很多信息,然后显示下一个类别。我永远不知道会有多少回复,我不知道如何解释这些变量。

我要感谢这些董事会上的所有人,他们指导我成为新成员并帮助我发布更清晰,更简洁的问题。还要感谢每个花时间帮助我学习成为更好的程序员的人。

1 个答案:

答案 0 :(得分:2)

使用像http://jsonviewer.stack.hu/这样的工具来显示你的json结构。它有很大帮助。

 <?php

$url = "https://api.data.gov/sam/v4/registrations/9606040070000?api_key=WI7nHENlp6QDMnWsb0Nnmzsv1slPDTjNM0XBoKvY";

$contents = json_decode(file_get_contents($url)); 

// echo var_dump($contents); 

$sam_data = $contents->sam_data; 

// echo var_dump($sam_data); 

$registration = $sam_data->registration; 

//echo var_dump($registration); 
$acass = $contents->sam_data->registration->qualifications->acass; 
$id = $acass->id; 

echo "id:  ". $id . "<br />";

//echo var_dump($acass->answers); 

foreach($acass->answers as $answer) {

    if(isset($answer->FormerFirm)) {
        $formerFirm = $answer->FormerFirm;      
        echo var_dump($formerFirm);
    }

}