What you need to do is use a caching system such as memcached .
In your code in which you get JSON you do a conditional check that sees if this JSON is already stored in the cache, if you just get it from there (which is an instant operation since the cache will generally store in RAM), if the JSON is not present you get it from the external server and store it in the cache. In code it's going to be something like this:
$memcached = new Memcached('pool');
$data = $memcached->get('alguma_previsao');
if ($data === Memcached::RES_NOTFOUND) { // dados não estão no cache
$data = getJSONdoServidorExterno(); // aqui você pega o JSON como já faz normalmente
$memcached->add('alguma_previsao', $data, 60 * 15); // armazena o JSON por 15 minutos no cache (60 segundos * 15)
}
$jsonFinal = $data; // aqui você tem o JSON de que precisa