使用 file_get_contents 从 url 获得 JSON
Get JSON from url with file_get_contents
我有一个服务器在 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
我已经直接从 url 检查了 json 有效性并且它的格式正确,我不明白 0 和 215ba 是从哪里来的。
显然我可以剥离字符串来消除两者,但我想知道是否有更具体的解决方案而不是解决方法
PS:不幸的是我不能使用 cURL
可能是 JSON 包含 UTF8 字符,所以在文件开头使用 BOM 标记,而您的 json_decode 函数是 运行 in PHP 没有启用多字节字符串?
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);
您遇到的问题很常见,理想情况下,当 json 数据格式不正确时会发生这种情况,例如字符串中包含不受支持的字符集或某些损坏的字符串。因此,只需尝试使用 UTF-8 支持解码您的文件内容,只是为了更安全,并减少您的问题的复杂性,您可以使用 php 中的 utf8_encode()
函数或使用 curl 来处理 utf -8 通过文件获取的内容。
我有一个服务器在 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
我已经直接从 url 检查了 json 有效性并且它的格式正确,我不明白 0 和 215ba 是从哪里来的。
显然我可以剥离字符串来消除两者,但我想知道是否有更具体的解决方案而不是解决方法
PS:不幸的是我不能使用 cURL
可能是 JSON 包含 UTF8 字符,所以在文件开头使用 BOM 标记,而您的 json_decode 函数是 运行 in PHP 没有启用多字节字符串?
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);
您遇到的问题很常见,理想情况下,当 json 数据格式不正确时会发生这种情况,例如字符串中包含不受支持的字符集或某些损坏的字符串。因此,只需尝试使用 UTF-8 支持解码您的文件内容,只是为了更安全,并减少您的问题的复杂性,您可以使用 php 中的 utf8_encode()
函数或使用 curl 来处理 utf -8 通过文件获取的内容。