我有以下代码将json转换为数组:
$str = file_get_contents('http://localhost/data.json');
$decodedstr = html_entity_decode($str);
$jarray = json_decode($decodedstr, true);
echo "<pre>";
print_r($jarray);
echo "</pre>";
但我的$jarray
一直在返回null
...我不知道为什么会发生这种情况..我已经在这个问题中验证了我的json:
validated json question任何人都可以告诉我我做错了什么?或者发生了什么。提前谢谢。
答案 0 :(得分:1)
您传递的json_decode
字符串无效JSON ,这就是NULL
返回的原因。
正如我在评论中看到的那样,检查生成的错误代码会提供与常量4
对应的JSON_ERROR_SYNTAX
,这意味着JSON字符串具有语法错误。
(见http://php.net/manual/en/function.json-last-error.php)
您应该检查(回显)从
获得的内容$str = file_get_contents('http://localhost/data.json');
(您可以编辑答案并发布 - 或者部分内容)
确定它无效JSON
;问题在于:data.json
。
然后,当您修复问题并从data.json
获得预期时,我将确保您确实需要对获取的数据使用html_entity_decode
。
这会很奇怪&#34;使用html编码的JSON数据。
<强>更新强>
看看你从data.json
得到的东西,JSON数据似乎包含实际的HTML实体(因为我看到
s的存在)
这实际上很奇怪,正确的做法是修复如何生成data.json
,确保返回非html编码 JSON数据,charset为UTF-8和响应内容类型为Content-Type: application/json
。
我们无法在此深化这一点,因为我不知道data.json
来自哪里或生成它的代码。最后你可以发布另一个答案。
所以这是一个快速修复,前提是正确的方法将是我刚刚建议的。
在解码html实体时,非中断空格
变为2字节UTF-8字符(字节值196,160),对于JSON编码数据无效。
想法是删除这些字符;你的代码变成了:
$str = file_get_contents('http://localhost/data.json');
$decodedstr = html_entity_decode($str);
// the character sequence for decoded HTML
$nbsp = html_entity_decode( " " );
// remove every occurrence of the character sequence
$decodedstr = str_replace( $nbsp, "", $decodedstr );
$jarray = json_decode($decodedstr, true);
答案 1 :(得分:0)
来自php手册
http://php.net/manual/en/function.json-decode.php
<强>返回强>:
...
API().getTrips(params) .observeOn(AndroidSchedulers.mainThread()) .doOnRequest((Long request) -> dummyView.setVisibility(View.VISIBLE)) .doOnCompleted(() -> createListView()) .doOnNext(response -> getTrips(response.body().getData())) .flatMap(getTripsModel -> Observable.from(getTripsModel.body().getData().getTrips())) .flatMap(tripsModel -> Observable.from(tripsModel.getSubTrips())) /******** ** at some point here I need to insert the ** IntermediateStops into the SubTripsModel *********/ .flatMap(subTripsModel -> API().getIntermediateStops( subTripsModel.getIntermediateStops(), Token.getInstance().TOKEN)) .doOnCompleted(() -> dummyView.setVisibility(View.GONE)) .subscribe(intermediateResponse -> { }, throwable -> { Log.i("REST ERROR", RestErrorHelper.getErrorMessage(throwable, mContext)); });
因此,传递给NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit
的JSON字符串无效:
可能是因为json_decode()