file_get_contents($url); 输入json

使用file_get_contents($url); 返回json 使用json_decode 无法解析,该怎么办 ,curl 方法也用过,都不管用

阅读 7.6k
10 个回答

这个问题自己解决了,第三方返回的数据是ascll的所以需要转换成utf-8格式 就可以了,跟json_decode没关系

你需要校验格式是否正确, 不BB上代码:

<?php
function treatJsonString($string)
{
    $jsonData = json_decode($string, true);

    switch (json_last_error()) {
        case JSON_ERROR_NONE:
            return $jsonData;
            break;
        case JSON_ERROR_DEPTH:
            print '[Error] - Maximum stack depth exceeded' . PHP_EOL;
            break;
        case JSON_ERROR_STATE_MISMATCH:
            print '[Error] - Underflow or the modes mismatch' . PHP_EOL;
            break;
        case JSON_ERROR_CTRL_CHAR:
            print '[Error] - Unexpected control character found' . PHP_EOL;
            break;
        case JSON_ERROR_SYNTAX:
            print '[Error] - Syntax error, malformed JSON' . PHP_EOL;
            break;
        case JSON_ERROR_UTF8:
            print '[Error] - Malformed UTF-8 characters, possibly incorrectly encoded' . PHP_EOL;
            break;
        default:
            print '[Error] - Unknown error' . PHP_EOL;
            break;
    }
    return null;
}


$jsonString = '{"x":123,"s":[{"a":"1"}]';

var_dump(treatJsonString($jsonString));

先你看下你的这个json是不是正常的json格式
然后看看你的php文件是否为utf-8 无BOM的
以前也遇到过类似的问题,去掉bom以后就好使了~

把返回的数据发上来看看

没问题啊,我就解析了出来:

clipboard.png

clipboard.png

json_decode($json, true)

带true表示解析成为php的array

首先要确认。返回的东西是不是json

首先确定一下你的Json有没有其他方式的转义,如果没有可以用Json格式化校验工具检测一下是否有问题。

在线Json格式化校验工具
http://www.bejson.com/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题