2014-01-26 2 views
-1

Я пытаюсь расшифровать использование JSON, но я не могу прочитать результаты узла.Декодирование JSON PHP

<html> 
<head> 
<title>Online PHP Script Execution</title> 
</head> 
<body> 
<?php 
$request = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22USDMXN%22%2C%20%22USDCHF%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback='; 
$session = curl_init($request); 
curl_setopt($session, CURLOPT_RETURNTRANSFER,true); 
$json = curl_exec($session);  
$obj = json_decode($json, true); 
if(!is_null($obj->query->results)){ 
    // Safe to parse datae 
    echo results .'</br>'; 
} 

print_r($obj['results']); 

?> 
</body> 
</html> 

JSON

{ 
"query": { 
    "count": 2, 
    "created": "2014-01-26T01:20:15Z", 
    "lang": "en-US", 
    "diagnostics": { 
    "user-time": "259", 
    "service-time": "341", 
    "build-version": "0.2.2157" 
    }, 
    **"results": {** 
    "rate": [ 
    { 
    "id": "USDMXN", 
    "Name": "USD to MXN", 
    "Rate": "13.4525", 
    "Date": "1/25/2014", 
    "Time": "7:20am", 
    "Ask": "13.453", 
    "Bid": "13.452" 
    }, 
    { 
    "id": "USDCHF", 
    "Name": "USD to CHF", 
    "Rate": "0.8945", 
    "Date": "1/25/2014", 
    "Time": "7:20am", 
    "Ask": "0.8947", 
    "Bid": "0.8943" 
    } 
    ] 
    } 
} 
} 

Я пытаюсь получить узел «результаты», так что я могу получить курсы валют, которые могут быть использованы для отображения на веб-сайтах.

Этот код использует yahoo api для получения курсов валют.

+0

Что такое '** "Результаты": {**' ' –

+3

json_decode ($ JSON, правда);' возвращает массив. Если вы хотите объект, опустите второй аргумент (или установите значение false). – Quasdunk

+0

Простой print_r ($ obj) даст вам довольно хорошее представление о том, что вы делаете неправильно. – andershagbard

ответ

0

Поскольку вы используете true как параметр в json_decode, вы получите массив.

Попробуйте

if(!is_null($obj['results']['rate'])){ 
    foreach($obj['results']['rate'] as $value){ 
     echo "{$value['Name']} => {$value['Rate']}<br>"; 
    } 
} 
-1

Вы должны использовать $obj->results, потому что он находится на том же уровне, что и запрос.

+0

это не сработает, он получает массив, а не объект, так как он передает 'true' в качестве параметра' json_decode() ' и должен быть '$ obj ['results'] ['rate']' –

Смежные вопросы