To prevent mixed content most browsers/functions will use the protocol already used if you specify only // instead of http:// or https://. This is not the case with file_get_contents. You must specify the protocol.
This does not work:
<?php
$jsonData = file_get_contents('//example.com/file.json');
print $jsonData;
?>
Specifying only 'example.com/file.json' without the double slash does not work either.
When running on Apache 2.4 , using $_SERVER['REQUEST_SCHEME'] is a better way to be protocol agnostic.
<?php
$jsonData = file_get_contents($_SERVER['REQUEST_SCHEME'].'://example.com/file.json');
print $jsonData;
?>
If using another web server, you may have to get the protocol another way or hard code it.