2015-07-18 3 views
0

Здравствуйте, Итак, у меня есть этот вызов.Ошибка Преобразование JSON в массив PHP

$preciobitcoin = curlCall('https://www.bitstamp.net/api/ticker/'); 

и я могу совершенно получить $preciobitcoin['last'].

, но это один

$preciodolar = curlCall('https://s3.amazonaws.com/dolartoday/data.json'); 

возвращение в виде строки вместо массива

это код функции, которая не работает это код функции, которая не работает

function curlCall($url, $params = null, $contentType = 'application/json', $options = array()) { 
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_FAILONERROR, true); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_SSLVERSION, 4); 

if (!is_null($params) && !is_null($options['key']) && !is_null($options['sig'])) { 
    curl_setopt($curl, CURLOPT_POST, TRUE); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $params); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: '.$contentType, 'key: '.$options['key'], 'sig: '.$options['sig'])); 
    // 
} else if (!is_null($params) && !empty($params)) { 
    curl_setopt($curl, CURLOPT_POST, TRUE); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $params); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: '.$contentType)); 
} else { 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: '.$contentType)); 
} 

// Allow for custom requests 
if (isset($options['custom_request']) && !empty($options['custom_request'])) { 
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $options['custom_request']); 
} 

curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; cryptoGlance ' . CURRENT_VERSION . '; PHP/' . phpversion() . ')'); 

$curlExec = curl_exec($curl); 
if ($curlExec === false || curl_errno($curl)) { 
    $data = array(); 
} else { 
    $data = json_decode($curlExec, true); 
} 

if (empty($data)) { 
    // return non-jsonfied data 
    return $curlExec; 
} 

curl_close($curl); 

return $data; 

}

+1

показать, как разобрать результат в обоих случаях, отредактировав пост – Viral

+0

Пробовали ли вы использовать 'json_decode' для разбора JSON строки в массив? – DavidDomain

+0

да, переменная становится нулевой. –

ответ

1

Возможно, это проблема с кодировкой. Вот пример, который корректно работает на моем localhost.

$str = file_get_contents('https://s3.amazonaws.com/dolartoday/data.json'); 
var_dump(mb_detect_encoding($str)); 

$str = mb_convert_encoding($str, "UTF-8"); 
var_dump(mb_detect_encoding($str)); 

var_dump(json_decode($str)); 
+0

Отлично! решил мою проблему! –

0

быстрый вызов json_last_error() возвращает этот

Malformed UTF-8 символов, возможно, неправильно закодированные

возможно есть несколько скрытых плохие символы (не utf8) в том, что файл.

+0

Я думал, что .. есть что-нибудь, что я мог бы сделать на моей стороне? –

+0

$ text = iconv ("utf-8", "utf-8 // ignore", $ text); –

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