John Chase
John Chase

Reputation: 105

PHP JSON Parsing Issue

I have this JSON output from a Government API, I need to display it using PHP. The problem is I can't use foreach more then once in a row or it doesn't work. I can't load all the criteria into the first foreach because say the first piece of data ACASS returns 3 results, all the fields after it will be displayed 3 times. Each field could return 1-10 results so there needs to be a system that accounts for variables.

I'm thinking the solution is to put all of the JSON items I need displayed into the first foreach but set them to only display if they're populated. That or use the current coding system I have but account for variable numbers somehow.

Any potential solutions are greatly appreciated.

This is the JSON output... https://api.data.gov/sam/v4/registrations/9606040070000?api_key=WI7nHENlp6QDMnWsb0Nnmzsv1slPDTjNM0XBoKvY

Here's the PHP I'm using...

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>';

I did my best to keep this short and simple question / code wise. In summary the issue is if you look at the JSON the data hierarchy makes a lot of the information display under ACASS/Answers and then the next category. I never know how many responses there will be and I'm not sure how to account for those variables.

I would like to thank everyone on these boards who has guided me as a new member and helped me post cleaner, more concise questions. Also thank you to everyone who has taken their own personal time to help me learn to become a better programmer.

Upvotes: 1

Views: 44

Answers (1)

Marko
Marko

Reputation: 10992

use a tool like http://jsonviewer.stack.hu/ for visualizing your json structure. It helps a lot.

 <?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);
    }

} 

Upvotes: 2

Related Questions