如何从 url 解析 php 中的 json

How to parse json in php from url

我是 json 的新手,所以我想问你一个可能非常简单的问题。 我试过四处搜索,但没有找到任何我可以开始工作的东西。 我调用了 API 并在 json 中收到了数据。 现在我的问题是通过我的 php 解析它,它 "will not find anything." 我的代码如下所示:

$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

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

JSON的开头是这样的:

{
  "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]['Sagskategori']['kategori']; 与使用 $data['Sagskategori']['kategori']; 完全相同。

请替换

foreach ($result as $data) {

来自

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

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

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