我有一台服务器以JSON提供一些数据。 我试图通常使用这些数据:
$res = file_get_contents($url);
$result = json_decode($res);
var_dump($result);
但是$ result还是一个字符串。 问题是来自file_get_content的数据在数据之前有一些字母数字字符串,之后是零。
类似的东西:
215ba
{"@attributes":{"ticker":"FCA"},"info...... // here all json data
0
我已经直接从网址检查了json的有效性,并且格式正确,我无法理解零和215ba的来源。
显然我可以删除两个字符串,但我想知道是否有更具体的解决方案而不是解决方法
PS:遗憾的是我无法使用cURL
答案 0 :(得分:3)
关于json_decode的文档的说明:http://php.net/manual/en/function.json-decode.php
This function only works with UTF-8 encoded strings.
。
这样的事可能会解决它:
$contents = file_get_contents($url);
$contents = utf8_encode($contents);
$results = json_decode($contents);
如果这不起作用,您可以使用正则表达式检查新行。假设json总是在1行。
<?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);
答案 1 :(得分:1)
可能是JSON包含UTF8字符,所以在文件开头使用BOM标记,而你的json_decode函数是在没有启用多字节字符串的PHP中运行的吗?
答案 2 :(得分:-1)
你遇到的问题我非常普遍,理想情况是当json数据不正确时会发生这种情况,例如字符串中包含不受支持的字符集或某些损坏的字符串。因此,只需尝试使用UTF-8支持对文件内容进行解码,以便更安全,并且可以通过在php中使用utf8_encode()
函数或使用curl处理获得的utf-8内容来解决问题。通过档案。