Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从url解析php中的json_Php_Json_Api_Parsing_Decode - Fatal编程技术网

如何从url解析php中的json

如何从url解析php中的json,php,json,api,parsing,decode,Php,Json,Api,Parsing,Decode,我是json新手,所以我要问你一个可能非常简单的问题。 我试着四处寻找,但没有找到任何我能找到的工作。 我调用了一个API并接收了json格式的数据。 现在我的问题来了,通过我的php解析它,它将找不到任何东西。 我的代码如下所示: $opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"Accept: application/vnd.travify.v1+json\r\n" ) );

我是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>";
}
{
  "odata.metadata":"...snip...","value":[
{
json代码可以在这里找到:


你们中的任何人都能看到我在代码中的失败,并让我走上正确的道路吗:-?

JSON的开头是这样的:

$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>";
}
{
  "odata.metadata":"...snip...","value":[
{
因此数组位于value对象内部

正确的代码应为:

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

请更换

foreach ($result 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>";
}

快速补充说明-您将$i初始化为-1,然后将其递增,因为您的foreach中第一件要做的事情是0?这部分是合乎逻辑的。为什么不将其初始化为0,然后作为foreach中的最后一个操作递增?在执行foreach循环之前,请尝试执行var_dump$result或print_r$result,以查看结果变量的外观。我首先要检查的主要问题是,你得到的是一个迭代对象。我认为,你只需要返回一个对象,所以你的整个循环想法可能不是正确的方法。JSON中的第一个值不是数组。编辑我已经看到了一些关于这些问题的答案。投票支持那些人非常感谢:-!这是一个很大的帮助!谢谢你拯救了我的一天:-