K3ll
K3ll

Reputation: 13

How to parse json in php from url

Im new to json, so i gotta ask you a maybe really simple questions. I've tried searching around but have not found anything I can get to work. I have called an API and received the data in json. And now comes my problem parsing it through my php, it "will not find anything." My code looks like this:

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

The json code can be find here: http://oda.ft.dk/api/Sag?$select=titel,Sagskategori/kategori&$expand=Sagskategori

Can anyone of you see my fail in the code, and get me on the right way :-) ?

Upvotes: 1

Views: 5611

Answers (2)

baroni
baroni

Reputation: 176

Please replace

foreach ($result as $data) {

by

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

And now you can iterate to your value array and get all informations from $data You don't need use $i, $data contains correct $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>";
}

Upvotes: 1

SirDarius
SirDarius

Reputation: 42869

The JSON starts like this:

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

So the array is inside the value object.

The correct code should be:

 foreach ($result['value'] as $data) {
    // snip
    if(!empty($result['value'][$i]['Sagskategori']['kategori'])){
        echo $result['value'][$i]['Sagskategori']['kategori'];
    }

Also, inside the loop, $result['value'][$i]['Sagskategori']['kategori']; is strictly the same as using $data['Sagskategori']['kategori'];.

Upvotes: 1

Related Questions