2016-04-14 6 views
1

У меня есть этот вывод JSON из правительственного API, мне нужно отобразить его с помощью PHP. Проблема в том, что я не могу использовать foreach больше, чем один раз подряд, или он не работает. Я не могу загрузить все критерии в первый foreach, потому что, скажем, первая часть данных ACASS возвращает 3 результата, все поля после этого будут отображаться 3 раза. Каждое поле может возвращать 1-10 результатов, поэтому должна существовать система, учитывающая переменные.PHP JSON Parsing Issue

Я думаю, что решение состоит в том, чтобы поместить все элементы 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, а затем в следующей категории. Я никогда не знаю, сколько ответов будет, и я не уверен, как учитывать эти переменные.

Я хотел бы поблагодарить всех на этих досках, которые направили меня как нового участника и помогли мне опубликовать более чистые, более сжатые вопросы. Также благодарим всех, кто взял свое личное время, чтобы помочь мне научиться стать лучшим программистом.

+2

Вы уверены, что хотите, чтобы все эти данные здесь, включая ключ API в URL-адресе? – Pevara

+0

Вы помните, чтобы передать второй параметр перед тем, как работать с результатом в виде массива? ex: '$ decoded_results = json_decode ($ jsonString, true);' – CarlosCarucce

+0

Данные общедоступны, и ключ API - это тот, который я получил только для этой пурпуры, спасибо. Я ценю, что ты смотришь на меня. Также Карлос, я не уверен, что следую за тобой, я думал, что сделал это, написав прежнюю [2]. Я пропустил второй параметр, просто так, как у меня есть, не учитывается тот факт, что в этой позиции может быть больше одного или двух или даже 10 возвращенных результатов. –

ответ

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

} 
+0

Помните, что вы должны разрешить внешнее чтение файла перед использованием 'file_get_contents' с URL-адресом, как описано здесь: http://stackoverflow.com/a/3488430/3435728 – CarlosCarucce

+0

@marko ah! хороший инструмент, прямо в мои закладки. Спасибо – YvesLeBorg

+0

Я мог бы продолжить структурировать его с этого момента? Неважно, сколько результатов возвращается каждому элементу? Например, если возвращаются 5 результатов ACASS, будет ли отключена следующая категория вложенной информации JSON (прежняя)? Я просто пытаюсь понять, как работает этот код, а не просто вырезать и вставлять его и никогда не знать. –