2015-01-05 4 views
1

Im новый для json, поэтому я должен спросить вас, может быть, очень простые вопросы. Я пробовал искать, но не нашел ничего, что мог бы работать. Я назвал API и получил данные в json. И теперь моя проблема, анализируя ее через мой php, она «ничего не найдет». Мой код выглядит следующим образом:Как разобрать json в php с url

$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

Может кто-нибудь из вас увидеть мою неудачу в коде, и получить меня на правильном пути :-)?

+0

quick side note - вы инициализируете '$ i'' '' '' 'и затем увеличиваете это как первая вещь в вашем 'foreach', чтобы сделать это' 0'? Это частично логично. Почему бы не включить его как '0', а затем увеличить в качестве последней операции в вашем' foreach'? –

+0

Попробуйте выполнить 'var_dump ($ result)' или 'print_r ($ result)' перед тем, как сделать цикл 'foreach()', чтобы увидеть, как выглядит ваша переменная результата. Главное, что я сначала проверил, это то, что вы возвращаете итеративный объект. Я думаю, вы просто вернетесь к одному объекту, поэтому вся идея цикла может оказаться неправильным. Первое значение в вашем JSON не является массивом. * edit * Я вижу пару ответов в этих строках. Упреки для них. :) – jmbertucci

ответ

1

Пожалуйста, замените

foreach ($result as $data) { 

по

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

И теперь вы можете перебирать в массив значений и получить всю информацию от $ данных Вам не нужно использовать $ I, $ данных содержит правильное значение $ 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>"; 
} 
+0

Спасибо! - Ты спасешь мой день :-) – K3ll

1

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'];.

+0

Большое вам спасибо :-)! это была большая помощь! – K3ll