Plastic Plastic - 16 days ago 7
PHP Question

Get JSON from url with file_get_contents

I have a server that provide some data in JSON.
I tried to get these data with the usual:

$res = file_get_contents($url);
$result = json_decode($res);
var_dump($result);


But $result is yet a string.
The problem is that the data that comes from file_get_content has some alphanumerical string before data and a zero after.

something like:

215ba
{"@attributes":{"ticker":"FCA"},"info...... // here all json data
0


I already checked json validity directly from the url and it's properly formatted, I can not understand where zero and 215ba come from.

Obviously I could strip the strings eliminating both but I was wondering if there was a more concrete solution instead of a workaround

PS: unfortunately I can not use cURL

Answer

Note on the docs for json_decode: http://php.net/manual/en/function.json-decode.php

This function only works with UTF-8 encoded strings..

Something like this might fix it:

$contents = file_get_contents($url);
$contents = utf8_encode($contents);
$results = json_decode($contents); 

If that's not working you could use regex to check for new lines. Assuming the json will always be on 1 line.

<?php
$contents = file_get_contents($url);
$contents = utf8_encode($contents);
preg_match('/^.+[\n](.+)[\n]./', $contents, $matches);

//the json is in $matches[1]
print_r($matches);