2016-04-14 88 views
1

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

我在想,解决的办法是将我需要显示的所有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中的API密钥吗? – Pevara

+0

您是否记得在将结果作为数组使用之前传递第二个参数?例如:'$ decry_results = json_decode($ jsonString,true);' – CarlosCarucce

+0

这些数据是公开可用的,API密钥是我为这个purpore准备的,谢谢​​。我感谢你为我寻找。还有卡洛斯我不确定我是否跟着你,我以为我是通过写前者来做到这一点的[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

请记住,在使用带有url的'file_get_contents'之前,您必须允许读取外部文件,如下所述:http://stackoverflow.com/a/3488430/3435728 – CarlosCarucce

+0

@marko啊!一个很好的工具,直接进入我的书签。谢谢 – YvesLeBorg

+0

从那时起我可以继续构建它?每个元素的返回结果有多少?例如,如果返回5个ACASS结果,它下面的嵌套JSON信息的下一个类别(formerFirm)是否关闭?我只是想了解这段代码是如何工作的,而不是仅仅剪切和粘贴它,并且永远不知道。 –