php判断json格式是否正确
2017-09-20 15:48
686 查看
1、校验json格式是否有误:
function data($value) { $res = json_decode($value, true); $error = json_last_error(); if (!empty($error)) { echo "<pre>"; print_r($value); echo "</pre>"; } return $res; }
延伸:json_last_error可以判断返回 JSON 编码解码时最后发生的错误。 错误如下:有对应的数字编码,但是只要非空,就表示有错误,对于一般的json格式校验来说,已经足够了!
0 = JSON_ERROR_NONE No error has occurred
1 = JSON_ERROR_DEPTH The maximum stack depth has been exceeded
2 = JSON_ERROR_STATE_MISMATCH Invalid or malformed JSON
3 = JSON_ERROR_CTRL_CHAR Control character error, possibly incorrectly encoded
4 = JSON_ERROR_SYNTAX Syntax error
5 = JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly incorrectly encoded PHP 5.3.3
人性化的输出json错误!
<?php if (!function_exists('json_last_error_msg')) { function json_last_error_msg() { static $ERRORS = array( JSON_ERROR_NONE => 'No error', JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', JSON_ERROR_STATE_MISMATCH => 'State mismatch (invalid or malformed JSON)', JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded', JSON_ERROR_SYNTAX => 'Syntax error', JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded' ); $error = json_last_error(); return isset($ERRORS[$error]) ? $ERRORS[$error] : 'Unknown error'; } }
2、带中文字的数组转json方法一(推荐)
加参数:JSON_UNESCAPED_UNICODE
$array = array('key' => 'value', 'test' => array('测试一下', 2, 3)); echo "<pre>"; print_r(json_encode($array, JSON_UNESCAPED_UNICODE)); echo "</pre>"; exit;
3、另一种方法将带中文字的数组转json方法:
//将汉字,特殊字符原样变成json数据 function ch_json_encode($data) { $ret = ch_urlencode($data); $ret = json_encode($ret); return '\'' . addslashes(urldecode($ret)) . '\''; } //汉字,特殊字符变可读懂的字符串主程序 function ch_urlencode($data) { if (is_array($data) || is_object($data)) { foreach ($data as $k => $v) { if (is_scalar($v)) { if (is_array($data)) { $data[$k] = urlencode($v); } else if (is_object($data)) { $data->$k = urlencode($v); } } else if (is_array($data)) { $data[$k] = ch_urlencode($v); // 递归调用该函数 } else if (is_object($data)) { $data->$k = ch_urlencode($v); } } } return $data; }
php5.2以后自带json_decode函数,但是对json文本串的格式要求非常严格。
很可能使用该函数得到的返回值是NULL,没有返回数组只有可能要么是编码问题,要么就是json返回的数据又特殊字符别无其他原因,下面是解决方法:
可以使用使用json_last_error()函数获取到的返回值来帮助我们判断出问题的原因。
其中如果提示错误JSON_ERROR_SYNTAX(Syntax error),表示json串格式错误。
可以通过以下几个方式排错:
json字符串必须以双引号包含
$output = str_replace("'", '"', $output);
json字符串必须是utf8编码
$output = iconv('gbk', 'utf8', $output);
3.不能有多余的逗号 如:[1,2,],用正则替换掉
preg_replace('/,\s*([\]}])/m', '$1', $output)
4、不能有换行、制表符:这个非常坑,经常排除了所有的错误还是出不来,就是这个地方,多了个换行符啥的,尤其是在excel编辑之后再导入到数据库,然后再用php取出的时候!
$jsonstr = ' {"succ":true,"data":{"id":"31","keywords":"","description":"","jianjie":" ","jianjie_short":"bb","nav":"ccc","deleted":"0","url":"http:\/\/travel.sina.com.cn\/beijing\/ "}}'; //$ret=preg_replace("/\t/", " ", $ret); //$jsonstr = preg_replace("/\n/", ' ', $jsonstr); $jsonstr = str_replace("\n", ' ', $jsonstr); //print_r($jsonstr);exit; //$jsonstr = str_replace ('\n','', $jsonstr); $jd = json_decode($jsonstr,true); $errorinfo = json_last_error(); //print_r(JSON_ERROR_DEPTH); print_r($jd);
当对UTF-8编码的文件进行操作时,如果要把读取的内容当作文本内容来处理,最好先对BOM进行一些处理,这个问题在PHP6中得到了解决(可以设置文本/二进制读取模式),有兴趣的朋友可以自己查找PHP6的手册。
相关文章推荐
- PHP判断json格式是否正确的实现代码
- php判断是否为json格式的方法
- 在线判断json格式是否正确
- PHP判断日期格式是否正确
- php判断是否为json格式的方法
- php判断是否为json格式的方法
- php判断是否为json格式的方法
- php判断IP地址格式是否正确
- php判断邮箱格式是否正确
- php如何判断是否为json数据(格式)
- php 表单校验函数库(判断email格式是否正确、http地址是否合法有效、手机号码是否合法)
- C#正则表达式判断输入日期格式是否正确
- 判断输入日期格式是否正确的正则表达式
- php——学习笔记,var_dump来判断表达式是否正确
- JS 判断页面的url是否是正确格式
- C#正则表达式判断输入日期格式是否正确
- C#判断常见类型格式是否正确的类
- 【DAY.10】php判断18位身份账号码是否正确(基于加权算法)
- 如何判断用户输入的邮箱格式是否正确?
- php判断文件上传图片格式是否为图片