如何从url解析php中的json

时间:2015-01-05 16:43:08

标签: php json api parsing decode

我是json的新手,所以我要问你一个非常简单的问题。 我试过四处寻找,但没找到任何可以上班的东西。 我调用了一个API并在json中接收了数据。 现在我的问题是通过我的php解析它,它“找不到任何东西。” 我的代码如下所示:

$opts = array(
    'http'=>array(
    'method'=>"GET",
    'header'=>"Accept: application/vnd.travify.v1+json\r\n"
    )
);

$context = stream_context_create($opts);
$url = 'http://oda.ft.dk/api/Sag?$select=titel,Sagskategori/kategori&$expand=Sagskategori';
$output = file_get_contents($url, false, $context); 

$string = file_get_contents($url, false, $context); 
$result = json_decode($string, true);

$i = -1;

foreach ($result as $data) {
    $i++;
    echo "#";
    echo $i;
    echo "<br>";
    echo "<b>Test 1:</b>";
    echo "<br>";
    if(!empty($result[$i]['value']['Sagskategori']['kategori'])){
        echo $result[$i]['value']['Sagskategori']['kategori'];
    }else{
        echo "Intet fundet.";
    }
    echo "<hr>";
}

可以在此处找到json代码:http://oda.ft.dk/api/Sag?$select=titel,Sagskategori/kategori&$expand=Sagskategori

你们中的任何人都可以在代码中看到我的失败,并以正确的方式让我:-)?

2 个答案:

答案 0 :(得分:1)

JSON的开头是这样的:

{
  "odata.metadata":"...snip...","value":[
{

因此数组在<{1}}对象中

正确的代码应该是:

value

此外,在循环内部, foreach ($result['value'] as $data) { // snip if(!empty($result['value'][$i]['Sagskategori']['kategori'])){ echo $result['value'][$i]['Sagskategori']['kategori']; } 与使用$result['value'][$i]['Sagskategori']['kategori'];完全相同。

答案 1 :(得分:1)

请替换

foreach ($result as $data) {

通过

foreach ($result["value"] as $data) {

现在你可以迭代到你的数组并从$ data获取所有信息 您不需要使用$ i,$ data包含正确的$ result [$ i]值

foreach ($result["value"] as $data) {
    echo "#";
    echo "<br>";
    echo "<b>Test 1:</b>";
    echo "<br>";
    if(!empty($data['Sagskategori']['kategori'])){
        echo $data['Sagskategori']['kategori'];
    }else{
        echo "Intet fundet.";
    }
    echo "<hr>";
}