导航:首页 > 编程语言 > phpjson解析错误

phpjson解析错误

发布时间:2024-10-25 22:29:38

php解析不了JSON

② PHP json_decode(); 为什么没输出

我们知道网络api并不是百分百可靠,当遇到网络不稳定,接口出错等各种因素,并不一定返回标准的json数据,例如:

//如果从网络api抓取失败,返回的response为错误信息
$response='requesttimeout';
//json_decode之后返回NULL,你打印之后仍然没有输出,所以你采纳的那个答案仍然也帮不到你
print_r(json_decode($response,true));
//使用var_mp打印虽然可以看到NULL值,可是这并没有任何用处
var_mp(json_decode($response,true));

系统函数json_decode()在解析非json字符串返回NULL,解析乱码的json也返回NULL,你压根都不知道到底是哪里出了问题,因为NULL该返回值是不能通过print_r打印出来的,而官方php手册给了一些捕获异常信息的方法已经封装在下面的函数中了:

<?php
/**
*json解析接口,优化json_decode对数组的解析
*@paramstring$json_codejson字符串
*@returnmix错误信息或者数组
*/
function_json_decode($json_code)
{
$json_arr=json_decode($json_code,true);
switch(json_last_error()){
caseJSON_ERROR_NONE:
$error='';
break;
caseJSON_ERROR_DEPTH:
$error='-Maximumstackdepthexceeded';
break;
caseJSON_ERROR_STATE_MISMATCH:
$error='-Underfloworthemodesmismatch';
break;
caseJSON_ERROR_CTRL_CHAR:
$error='-';
break;
caseJSON_ERROR_SYNTAX:
$error='-Syntaxerror,malformedJSON';
break;
caseJSON_ERROR_UTF8:
$error='-MalformedUTF-8characters,possiblyincorrectlyencoded';
break;
default:
$error='-Unknownerror';
break;
}
if($error)
{
return$error.':'.$json_code;
}else{
return$json_arr;
}
}
header('Content-type:text/html;charset=utf-8');
$json='thisisnotajsoncode';
$arr=_json_decode($json);
if(is_array($arr))
{
//解析正确,逻辑代码部分
print_r($arr);
}else{
//请求超时,一般都会有异常处理机制,例如重新发起请求
if($result=='requesttimeout'){
//发起请求
}else{
//如果没有异常处理机制,抛出异常给上一层处理
thrownewException($result);
}
}

使用_json_decode的返回值如果是字符串,说明在解析json数据时遇到了错误,只要添加适当处理机制,可以大大提高代码的稳固性。

如果返回值是数组,这时便可以使用print_r打印出来。

③ php json解析 出现问题 Notice: Trying to get property of non-object in。。。

php json解析 出现问题 Notice: Trying to get property of non-object in是设置错误造成的,解决方法为:

1、以快递100接口为例,返回的JSON数据。

④ 关于PHP返回JSON的问题。

json 是一个标准来的...不用修改也不能修改

它要求你以:

* {
* "rows" : [{},{}], //数据集合
* "results" : 100, //记录总数
* "hasError" : false, //是否存在错误
* "error" : "" // 仅在 hasError : true 时使用
* }


意思是以一个对象的形式返回...对象内容包括一个数据rows,包括一个结果总数result...等..你在PHP中,直接写成类就可以了...

例子如下:

<?php


$obj=newstdclass();
$arr=array(1,1,1,1,1);
$obj->arr=$arr;
$obj->results=100;
$obj->hasError='false';
$obj->error='';

echojson_encode($obj);
?>

⑤ php怎么接收json类型数据

PHP接收JSON格式的数据
在API服务中,目前流行采用json形式来交互。
给前端调用的接口输出Json数据,这个比较简单,只需要组织好数据,用json_encode($array) 转化一下,前端就得到json格式的数据。
接收前端提交的json数据稍微复杂一点,原因是:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。因此,对型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之类的内容无法解析,如果用$_POST数组来接收就会失败!
此时可以使用$GLOBALS['HTTP_RAW_POST_DATA'] 或 file_get_contents('php://input') 来获取提交的数据
查看手册,可以发现$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST的区别:
$_POST:通过 HTTP POST 方法传递的变量组成的数组,是自动全局变量。
$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。
补充说明:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。

⑥ php怎么解析utf-8带BOM编码的json数据,php解析json数据返回NULL

son_decode函数能够接收utf8编码的参数,但是当参数中包含BOM时,json_decode就会失效。
这个函数能将给定的字符串转换成UTF-8编码,移除其中的BOM。
下面是PHP代码:
function prepareJSON($input) {

//This will convert ASCII/ISO-8859-1 to UTF-8.
//Be careful with the third parameter (encoding detect list), because
//if set wrong, some input encodings will get garbled (including UTF-8!)
$imput = mb_convert_encoding($input, 'UTF-8', 'ASCII,UTF-8,ISO-8859-1');

//Remove UTF-8 BOM if present, json_decode() does not like it.
if(substr($input, 0, 3) == pack("CCC", 0xEF,

⑦ 如何修复错误格式的JSON在PHP

用json_encode()函数对数组进行JSON编码。
<?php
$arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echojson_encode($arr);
?>
以上例程会输出:
{"a":1,"b":2,"c":3,"d":4,"e":5}[1]
当有中文字符时,当直接使用json_encode()函数会使汉字不能正常显示。所以有了这个适用性比较广的函数ch_json_encode()来解决这个问题。

阅读全文

与phpjson解析错误相关的资料

热点内容
微盟程序员删库原因 浏览:733
服务器怎么设置五小时后关机 浏览:118
单片机下层 浏览:28
app算什么端 浏览:284
拍美食用什么app 浏览:644
服务器优劣怎么判断 浏览:15
湖北dns服务器ip地址 浏览:668
linuxphp创建文件 浏览:901
idea不能编译web项目 浏览:959
百度导航怎么看服务器 浏览:57
python部署机器学习模型 浏览:214
离心式压缩机控制 浏览:914
linuxphp全局 浏览:954
程序员接私单聊天记录 浏览:554
phpjson解析错误 浏览:492
算法加速工程师 浏览:497
内网不能访问公网服务器地址 浏览:642
程序员在厦门做什么工作 浏览:685
linuxmatlab卸载 浏览:985
bat女程序员数量 浏览:519